#!/bin/bash
set -euo pipefail

readonly scriptDir=$(dirname $0)
source $scriptDir/gamename.sh

readonly tmpDir=/tmp/deliver-$$
trap "rm -rf $tmpDir" EXIT
mkdir -p $tmpDir

function main
{
  echo "Delivering [$NAME]"
  make clean
  ./check
  deliverBinaryVersion
  #deliverWebVersion
}

function deliverBinaryVersion
{
  local N=$NAME
  local version="$(date +"%Y%m%d")_$(git rev-parse HEAD)"

  mkdir $tmpDir/$N

  echo "Version: $version"

  echo "-------------------------------------"
  echo "Building binaries"

  # Windows binaries
  BIN_WIN=$tmpDir/bin/w64
  CXXFLAGS="" \
  BIN=$BIN_WIN \
    ./scripts/w64-make -j`nproc` \
    VERSION="$version" \
    $BIN_WIN/rel/game.exe \
    >/dev/null

  gccVersion=$(x86_64-w64-mingw32-g++ -dumpversion)

  cp $BIN_WIN/rel/game.exe                                           $tmpDir/$N/$N.exe
  cp /usr/x86_64-w64-mingw32/lib/libwinpthread-1.dll                 $tmpDir/$N
  cp /usr/lib/gcc/x86_64-w64-mingw32/$gccVersion/libstdc++-6.dll     $tmpDir/$N
  cp /usr/lib/gcc/x86_64-w64-mingw32/$gccVersion/libgcc_s_seh-1.dll  $tmpDir/$N
  cp /opt/envs/win64/bin/SDL2.dll                                    $tmpDir/$N

  # GNU/Linux binaries
  CXXFLAGS="-include extra/glibc_version.h" \
  BIN=$tmpDir/bin/gnu \
    make -j`nproc` \
    VERSION="$version" \
    >/dev/null

  echo -n "Game required GLIBC: "
  nm -D $tmpDir/bin/gnu/rel/game.exe | grep GLIBC_ | sed 's/.*GLIBC_//g' | sort -Vru | head -n 1

  cp -a $tmpDir/bin/gnu/rel/game.exe                                 $tmpDir/$N/$N.x86_64

  # Strip executables
  strip -s $tmpDir/$N/*.{exe,dll,x86_64}

  # Compress executables
  upx -9 $tmpDir/$N/*.{exe,dll,x86_64}

  echo "$version" > "$tmpDir/$N/version.txt"

  # Copy data
  cp -a res                                                        $tmpDir/$N/res

  (
    cd $tmpDir
    zip -q $N.zip -r $N
  )

  cp $tmpDir/$N.zip /tmp/
  du -hs /tmp/$N.zip
}

function deliverWebVersion
{
  echo "-------------------------------------"
  echo "Building Web version"
  BIN=bin/asmjs \
    scripts/asmjs-make -j`nproc` bin/asmjs/rel/game.html

  #------------------------------------------------------------------------------
  # create game directory
  #------------------------------------------------------------------------------
  readonly gameDir=$tmpDir/$NAME
  mkdir -p $gameDir

  cp -a bin/asmjs/rel/* $gameDir
  cp index.html $gameDir/index.html

  #------------------------------------------------------------------------------
  # archive it
  #------------------------------------------------------------------------------
  pushd $tmpDir
  zip $NAME.zip -r $NAME
  popd

  mv $tmpDir/$NAME.zip .

  #------------------------------------------------------------------------------
  # upload it to code.alaiwan.org
  #------------------------------------------------------------------------------
  rsync \
    --compress \
    --delete \
    -vr $gameDir/* alaiwans@code.alaiwan.org:public_html/games/$NAME
}

main
