#!/bin/bash
# inspirated source http://www.cambus.net/creating-thumbnails-using-phantomjs-and-imagemagick/ for global idea
#                   https://gist.github.com/rsvp/1171304 for httpstatus code
# All info at http://forge.leslibres.org/projects/soshot

site=$1 # url for thumbshot
hashUrl=$2 # hash(url) is the name of final image
thumbSize=$3 # size of thumb widthxheight ex : 190x90
sizeNameDir=$4 # name of size dir
renderType=$5 # make only thumbshot / thumbshot + realSize / thumbshot + complete / thumbshot + complete + realSize
waitForResult=$6 # if true we try to make soon as possible or add to queue

##########################################
##### DON'T EDIT THIS PARAM  USE     #####
##### cache/config/serverOptions.php #####
##### for overwrite options          #####
##########################################
maxThread=1 # max parralle work. For me the best is nb 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))`
optimizeTool='' # external tool form optimize png
maxQueue=50 # max process in queue
currentProcess=$(ps -e | grep -v grep | grep thumb_ | wc -l)
firstLevel=${hashUrl:0:2}
secondLevel=${hashUrl:2:2}
startPath=$sizeNameDir/$firstLevel/$secondLevel/
getArch=$(getconf LONG_BIT)
#echo $getArch
if [ $site == "manual" ]
then
    site=$(cat "../cache/tmp/manual.txt")
    echo '' > "../cache/tmp/manual.txt"
fi

mkdir -p "../cache/img/$startPath"

if [ -f "../cache/config/serverOptions.php" ]
then
    source "../cache/config/serverOptions.php"
fi

if [ $currentProcess -gt $maxQueue ]
then
    exit
fi

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`
if [ $getArch -eq 64 ]
then
  timeout $timeOut ./phantomjs_x64 --disk-cache=false --local-storage-path=bin/ --ignore-ssl-errors=true rasterize.js "$site" "../cache/tmp/$hashUrl.png"
else
  timeout $timeOut ./phantomjs_x86 --disk-cache=false --local-storage-path=bin/ --ignore-ssl-errors=true rasterize.js "$site" "../cache/tmp/$hashUrl.png"
fi

if [ ! -f "../cache/tmp/$hashUrl.png" ]
then
    echo 0
    errorCode=`echo $(curl -k --write-out %{http_code} --silent -S --connect-timeout $timeOut \--no-keepalive --output /dev/null $site)`
    if [ $site == 'manual' ]
    then
        errorCode='manual'
    fi
    case $errorCode in
    000) cp "../bin/000.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "../bin/000.png" "../cache/img/$startPath""$hashUrl.png" ;;
    200) cp "../bin/error.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "../bin/error.png" "../cache/img/$startPath""$hashUrl.png" ;;
    404) cp "../bin/404.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "../bin/404.png" "../cache/img/$startPath""$hashUrl.png" ;;
    *) cp "..bin/error.png" "../cache/img/$startPath""$hashUrl""_thumb.png" && cp "../bin/error.png" "../cache/img/$startPath""$hashUrl.png" ;;
    esac
    if $log
    then
        end_time=`date +%s`
        logDate=`date +'[%a %d %b %Y] [%H:%M:%S]'`
        if [ $errorCode == 200 ]
        then
          echo "none --- "$site" --- "$hashUrl" --- "$thumbSize" --- "$sizeNameDir" --- "$onlyThumb" --- true --- "$errorCode > "../cache/logs/retry/"$hashUrl".log"
        else
          echo "none --- "$site" --- "$hashUrl" --- "$thumbSize" --- "$sizeNameDir" --- "$onlyThumb" --- true --- "$errorCode > "../cache/logs/other/"$hashUrl".log"
        fi
    fi
    exit
fi


case $renderType in
  # thumbnail only
  t)
    convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 -filter Lanczos -thumbnail "$thumbSize" "../cache/img/$startPath""$hashUrl""_thumb.png"
    if [ $optimizeTool ]
    then
        eval $optimizeTool "../cache/img/$startPath""$hashUrl""_thumb.png"
    fi
    rm "../cache/tmp/$hashUrl.png"
    if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" ]]
        then
            echo 1
        else
            echo 0
    fi
  ;;
  # thumbnail + complete
  tc)
    convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 -filter Lanczos -thumbnail "$thumbSize" "../cache/img/$startPath""$hashUrl""_thumb.png"
    if [ $optimizeTool ]
      then
          eval $optimizeTool "../cache/img/$startPath""$hashUrl""_thumb.png" "../cache/tmp/$hashUrl.png"
      fi
    mv "../cache/tmp/$hashUrl.png" "../cache/img/$startPath""$hashUrl""_complete.png"
    if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" && -f "../cache/img/$startPath""$hashUrl""_complete.png" ]]
        then
            echo 1
        else
            echo 0
    fi
  ;;
  # thumbnail + realsize
  tr)
    convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 "../cache/img/$startPath""$hashUrl.png"
    convert "../cache/img/$startPath""$hashUrl.png" -filter Lanczos -thumbnail "$thumbSize" "../cache/img/$startPath""$hashUrl""_thumb.png"
    if [ $optimizeTool ]
    then
        eval $optimizeTool "../cache/img/$startPath""$hashUrl""_thumb.png" "../cache/img/$startPath""$hashUrl.png"
    fi
    rm "../cache/tmp/$hashUrl.png"
    if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" && -f "../cache/img/$startPath""$hashUrl.png" ]]
      then
          echo 1
      else
          echo 0
      fi
  ;;
  # thumbnail + realsize + complete
  trc)
    convert "../cache/tmp/$hashUrl.png" -crop 1280x1024+0+0 "../cache/img/$startPath""$hashUrl.png"
    convert "../cache/img/$startPath""$hashUrl.png" -filter Lanczos -thumbnail "$thumbSize" "../cache/img/$startPath""$hashUrl""_thumb.png"
    if [ $optimizeTool ]
    then
        eval $optimizeTool "../cache/img/$startPath""$hashUrl""_thumb.png" "../cache/img/$startPath""$hashUrl.png" "../cache/tmp/$hashUrl.png"
    fi
    mv "../cache/tmp/$hashUrl.png" "../cache/img/$startPath""$hashUrl""_complete.png"
    if [[ -f "../cache/img/$startPath""$hashUrl""_thumb.png" && -f "../cache/img/$startPath""$hashUrl.png" && -f "../cache/img/$startPath""$hashUrl""_complete.png" ]]
      then
          echo 1
      else
          echo 0
      fi
  ;;
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 >> '../cache/logs/success.txt'
fi
