#!/bin/bash
# inspirated source http://www.cambus.net/blog/page/3/ for global idea
#                   https://gist.github.com/rsvp/1171304 for httpstatus code
# All info at http://forge.leslibres.org/projects/soshot

site=$1 # url must be encode by url_encode() or equivalent ex : http://google.com
md5Site=$2 # md5(url) is the name of final image 
thumbSize=$3 # size of thumb widthxheight ex : 190x90
onlyThumb=$4 # make only thumbshot no full size image 
waitForResult=$5 # if true we try to make soon as possible or add to queue
maxThread=2 # max parralle work for me the best is processor core - 1
timeOut=60 # default time out after this time the site are declared in error 
log=false # log all generation success and error
randomSleep=`echo $((RANDOM%20))`

if [ ! $waitForResult ]
then
    sleep `echo $((RANDOM%20))`
    while [[ `ps -e | grep -v grep | grep phantomjs | wc -l` -ge $maxThread ]]
    do
        sleep `echo $((RANDOM%20))`
    done
fi
start_time=`date +%s`
#firstLevel=${md5Site:0:2}
#secondLevel=${md5Site:2:2}
#mkdir -p "bin/img/$firstLevel/$secondLevel/"
timeout $timeOut ./bin/phantomjs --disk-cache=false --local-storage-path=/bin/ --ignore-ssl-errors=true /bin/rasterize.js "$site" "cache/tmp/$md5Site.png"
if [ ! -f "cache/tmp/$md5Site.png" ]
then
    echo 0
    errorCode=`echo $(curl -k --write-out %{http_code} --silent -S --connect-timeout $timeOut \--no-keepalive --output /dev/null $site)` 
    case $errorCode in
    000) cp "bin/000.png" "cache/img/$md5Site""_thumb.png" && cp "bin/000.png" "cache/img/$md5Site.png" ;;
    404) cp "bin/404.png" "cache/img/$md5Site""_thumb.png" && cp "bin/404.png" "cache/img/$md5Site.png" ;;
    *) cp "bin/error.png" "cache/img/$md5Site""_thumb.png" && cp "bin/error.png" "cache/img/$md5Site.png" ;;
    esac
    if $log
    then
        end_time=`date +%s`
        logDate=`date +'[%a %d %b %Y] [%H:%M:%S]'`
        echo $logDate `expr $end_time - $start_time`s --- ERROR --- httpstatus $errorCode --- $site >> 'cache/logs/logs.txt'
    fi
    exit
fi
if [ $onlyThumb ]
then
    convert "cache/tmp/$md5Site.png" -crop 1280x1024+0+0 -filter Lanczos -thumbnail "$thumbSize" "cache/img/$md5Site""_thumb.png"
else
    convert "cache/tmp/$md5Site.png" -crop 1280x1024+0+0 "cache/img/$md5Site.png" &&
    convert "cache/img/$md5Site.png" -filter Lanczos -thumbnail "$thumbSize" "cache/img/$md5Site""_thumb.png"
fi
rm "cache/tmp/$md5Site.png"

if [ $onlyThumb ]
then
    if [[ -f "cache/img/$md5Site""_thumb.png" ]]
        then
            echo 1
        else
            echo 0
    fi
else
    if [[ -f "cache/img/$md5Site""_thumb.png" && -f "cache/img/$md5Site.png" ]]
        then
            echo 1
        else
            echo 0
    fi
fi
if $log
then
    end_time=`date +%s`
    logDate=`date +'[%a %d %b %Y] [%H:%M:%S]'`
    echo $logDate `expr $end_time - $start_time`s --- $site >> 'cache/logs/logs.txt'
fi
