#!/usr/bin/env bash

set -ex

SCRIPTPATH="$(cd $(dirname ${0}); pwd -P)"

SERVER_ADDR="https://app.emcode-provision.app.docker.rew.to"
TOKEN="Rgg5gzEZuzLfF9hR"

### path to store state of code
STATE_PATH="${HOME}/emcode-store"
### absolute path to store code (default: <STATE_PATH>)
CODE_PATH="${STATE_PATH}/code.js"

_query_args="token=${TOKEN}"

init_config() {
    local write_config=false

    if [[ -f ${SCRIPTPATH}/config.txt ]]; then
        source ${SCRIPTPATH}/config.txt
    else
        write_config=true
    fi

    if [[ ${write_config} == true ]]; then
        save_config
    fi
}

save_config() {
cat <<EOF >${SCRIPTPATH}/config.txt
STATE_PATH=${STATE_PATH}
CODE_PATH=${CODE_PATH}
TOKEN=${TOKEN}
EOF
}

make_query_args() {
    local version=$(cat ${STATE_PATH}/version.txt 2>/dev/null | tr -d '\n')

    if [[ ! -z ${version} ]]; then
        _query_args+="&ver=${version}"
    fi
}

extract_version() {
    local begin_comment="<!--"
    local end_comment="-->"

    if [[ ${CODE_TYPE} == "script" ]]; then
        begin_comment="/\*"
        end_comment="\*/"
    fi

    grep -oP "(?<=${begin_comment})[0-9a-f_-]+(?=${end_comment})" <<< ${1}
}

make_home() {
    if [[ ! -d ${STATE_PATH} ]]; then
        mkdir -p ${STATE_PATH}
    fi
}

main() {
    make_query_args

    local code=$(curl -s -L ${SERVER_ADDR}?${_query_args})
    local version=$(extract_version "${code}")

    if [[ ! -z ${version} ]]; then
        make_home
        cat <<<${code} >${CODE_PATH}
        echo -n ${version} >${STATE_PATH}/version.txt
    fi
}

init_config $@
main
# save_config
