#!/bin/bash

ZTO_VER=$(jq -r '.version' synology/config.json)
PKG_REV=$(jq -r '.rev' synology/config.json)
echo $ZTO_VER-$PKG_REV
ZTO_DESC=$(jq -r '.desc' synology/config.json)
echo $ZTO_DESC
ZTO_EMAIL=$(jq -r '.email' synology/config.json)
echo $ZTO_EMAIL
read -p "Confirm details [y/n] ? " -n 1 -r; echo; if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Exiting."; exit; fi

build_environment()
{
  git clone https://github.com/SynoCommunity/spksrc.git
  sudo docker build --load -t zt-spksrc -f Dockerfile.spksrc .
}

generate_package_sources()
{
  # Clean up any intermediate files
  sudo make -C spksrc clean
  rm -rf spksrc/distrib/*
  rm -rf spksrc/packages/*
  rm -rf spksrc/distrib/*source.tar.gz*
  rm -rf spksrc/cross/*
  mkdir -p spksrc/cross/zerotier

  # Generate the SPK contents

  # Copy package scripts to spksrc so they're accessible to container
  rm -rf spksrc/dsm6-pkg
  cp -rf dsm6-pkg spksrc/dsm6-pkg

  TAB="$(printf '\t')"

  cd ..

  # Generate ZTO source tarball used by spksrc
  git ls-files -z | xargs -0 tar -czvf source.tar.gz
  mkdir -p synology/spksrc/distrib
  cp source.tar.gz synology/spksrc/distrib/source.tar.gz

cat > synology/spksrc/cross/zerotier/digests <<- EOM
source.tar.gz SHA1 $(sha1sum source.tar.gz | awk '{print $1}')
source.tar.gz SHA256 $(sha256sum source.tar.gz | awk '{print $1}')
source.tar.gz MD5 $(md5sum source.tar.gz | awk '{print $1}')
EOM

  cd -


  STAGING_DIR='$(STAGING_DIR)'
  RUN='$(RUN)'

cat > spksrc/cross/zerotier/Makefile <<- EOM
PKG_NAME = ZeroTierOne
PKG_VERS = $ZTO_VER
PKG_EXT = tar.gz
PKG_DIST_NAME = source.tar.gz
PKG_DIR =
PKG_DIST_SITE = http://localhost:8000
DEPENDS =
GNU_CONFIGURE = 1
CONFIGURE_ARGS = HAVE_CXX=yes

INSTALL_TARGET = zerotier_custom_install
CONFIGURE_TARGET = zerotier_custom_configure

ENV += ZT_SYNOLOGY=1

include ../../mk/spksrc.cross-cc.mk

.PHONY: zerotier_custom_install
zerotier_custom_install:
${TAB}$RUN mkdir -p $STAGING_DIR/bin
${TAB}$RUN cp zerotier-one $STAGING_DIR/bin/zerotier-one
EOM

cat > spksrc/cross/zerotier/PLIST <<- EOM
bin:bin/zerotier-one
EOM

  #
  # Set up (spk) directory contents
  #
  rm -rf spksrc/spk/*
  mkdir -p spksrc/spk/zerotier

  STAGING_DIR='$(STAGING_DIR)'
  WORK_DIR='$(WORK_DIR)'
  PRODUCT_DIR='$(PRODUCT_DIR)'

cat > spksrc/spk/zerotier/Makefile <<- EOM
SPK_NAME = zerotier
SPK_VERS = $ZTO_VER
SPK_REV = $PKG_REV
SPK_ICON = /spksrc/dsm6-pkg/PACKAGE_ICON_256.png
DEPENDS = cross/zerotier
MAINTAINER = ZeroTier, Inc.
DESCRIPTION = $ZTO_DESC
LICENSE  = BUSL-1.1
CHANGELOG =
HOMEPAGE = https://my.zerotier.com
REPORT_URL = https://github.com/zerotier/ZeroTierOne/issues
DISPLAY_NAME = ZeroTier
PRODUCT_DIR = $WORK_DIR

STARTABLE = yes
REQUIRED_DSM = 6.2.4

ENV += ZT_SYNOLOGY=1

SSS_SCRIPT = ../../dsm6-pkg/start-stop-status.sh

PRE_STRIP_TARGET = zerotier_install

include ../../mk/spksrc.spk.mk

.PHONY: zerotier_install
zerotier_install:
${TAB}install -m 755 -d $STAGING_DIR/bin
${TAB}install -m 755 $PRODUCT_DIR/zerotier-one $STAGING_DIR/bin/zerotier-one
EOM

cat > spksrc/spk/zerotier/PLIST <<- EOM
bin:bin/zerotier-one
EOM
}

build()
{
  pushd synology
  build_environment
  generate_package_sources
  sudo docker run -it -v $(pwd)/spksrc:/spksrc zt-spksrc /bin/bash
  popd
}

"$@"