#!/bin/sh
# One-time: write .env and env/*.env on a server from the old separate stacks' .env files.
#   sh infra/server-env.sh <old platform folder> <old cms folder>
# The database passwords, salts and keys of the old stacks are kept (the data moves with them); the WhatsApp side
# is new, so its keys are generated here. Nothing is printed but variable names. An existing .env is never replaced.
set -e
cd "$(dirname "$0")/.."
old_platform=${1:?old platform folder}
old_cms=${2:?old cms folder}
[ -f "$old_platform/.env" ] && [ -f "$old_cms/.env" ] || { echo "no .env in $old_platform or $old_cms"; exit 1; }
[ ! -f .env ] || { echo ".env already exists here; nothing written"; exit 1; }

val() { { grep -E "^$1=" "$2" || true; } | head -1 | cut -d= -f2- | tr -d '\r'; }
rnd() { head -c 48 /dev/urandom | base64 | tr -dc 'A-Za-z0-9' | head -c "${1:-32}"; }
drop() {   # drop <file> <VAR...>  -> the file without those variables
    f=$1; shift
    pat=$(printf '%s|' "$@"); pat=${pat%|}
    tr -d '\r' < "$f" | grep -vE "^($pat)="
}

wa_key=$(rnd 40)
umask 077
mkdir -p env

cat > .env <<EOF
# Thinkera Enterprise on the server: shared settings (see .env.example for the meaning of each line).
COMPOSE_PROJECT_NAME=thinkera

BIND_ADDRESS=127.0.0.1
SITE_PORT=8890
PLATFORM_PORT=8891
GATEWAY_PORT=8892
EVOLUTION_PORT=8893

PG_ADMIN_USER=postgres
PG_ADMIN_PASS=$(rnd 32)
PG_SHARED_BUFFERS=1GB
PG_MAX_CONNECTIONS=250

MOODLE_DB_NAME=$(val MOODLE_DB_NAME "$old_platform/.env")
MOODLE_DB_USER=$(val MOODLE_DB_USER "$old_platform/.env")
MOODLE_DB_PASS=$(val MOODLE_DB_PASS "$old_platform/.env")

CMS_DB_NAME=$(val POSTGRES_DB "$old_cms/.env")
CMS_DB_USER=$(val POSTGRES_USER "$old_cms/.env")
CMS_DB_PASS=$(val POSTGRES_PASSWORD "$old_cms/.env")

WA_DB_USER=wa
WA_DB_PASS=$(rnd 32)

REDIS_MAXMEMORY=1gb

EVOLUTION_IMAGE=evoapicloud/evolution-api:latest
EVOLUTION_API_KEY=$(rnd 40)

MOODLE_BRANCH=$(val MOODLE_BRANCH "$old_platform/.env")
MOODLE_TGZ=$(val MOODLE_TGZ "$old_platform/.env")

DEV_VIDEO_DIR=./infra/empty
BACKUP_DIR=/var/www/private/thinkera.academy/backups
BACKUP_KEEP=14
EOF
sed -i 's/^MOODLE_BRANCH=$/MOODLE_BRANCH=502/' .env

{
    echo '# Loaded into the platform (moodle, cron) only. Database, Redis and shared keys live in ../.env.'
    echo
    drop "$old_platform/.env" MOODLE_DB_TYPE MOODLE_DB_HOST MOODLE_DB_PORT MOODLE_DB_NAME MOODLE_DB_USER MOODLE_DB_PASS \
        MOODLE_REDIS_HOST MOODLE_REDIS_PORT MOODLE_BRANCH MOODLE_TGZ WHATSAPP_ENABLED WHATSAPP_GATEWAY_URL \
        WHATSAPP_API_KEY WHATSAPP_PHONE_FIELD WHATSAPP_COUNTRY_CODE WHATSAPP_EVENT DEV_LOGIN_KEY
    grep -q '^SITE_URL=' "$old_platform/.env" || echo 'SITE_URL=https://thinkera.academy'
    cat <<EOF

# WhatsApp: off until the number is linked in the Evolution manager; then WHATSAPP_ENABLED=1, ./tk up, ./tk configure
WHATSAPP_ENABLED=0
WHATSAPP_GATEWAY_URL=http://gateway:8000
WHATSAPP_API_KEY=$wa_key
WHATSAPP_PHONE_FIELD=phone2
WHATSAPP_COUNTRY_CODE=20
WHATSAPP_EVENT=manual

# never set on a server that faces the internet
DEV_LOGIN_KEY=
EOF
} > env/platform.env

{
    echo '# Loaded into the cms only. Database settings live in ../.env.'
    echo
    drop "$old_cms/.env" POSTGRES_USER POSTGRES_PASSWORD POSTGRES_DB PLATFORM_INTERNAL_URL
    echo 'PLATFORM_INTERNAL_URL=http://platform-web'
} > env/cms.env

sed -e "s/^GATEWAY_API_KEYS=.*/GATEWAY_API_KEYS=moodle:$wa_key/" \
    -e "s/^ADMIN_KEY=.*/ADMIN_KEY=$(rnd 32)/" \
    -e "s/^WEBHOOK_TOKEN=.*/WEBHOOK_TOKEN=$(rnd 32)/" \
    env/gateway.env.example > env/gateway.env

for f in .env env/platform.env env/cms.env env/gateway.env; do
    printf '%-18s %s variables\n' "$f" "$(grep -cE '^[A-Z_0-9]+=' "$f")"
done
