#!/usr/bin/env bash
set -euo pipefail

app_root='/srv/filyx'
incoming='/home/debian/.filyx-incoming'
archive="$incoming/filyx-source.tar.gz"
source_env="$incoming/filyx.env"
source_sql="$incoming/ionos.sql"
backup_root='/var/backups/filyx'
backup_sql="$backup_root/ionos-before-ovh-cutover.sql"

test -s "$archive"
test -s "$source_env"
test -s "$source_sql"

sudo install -d -o debian -g www-data -m 0750 "$app_root"
sudo tar -xzf "$archive" -C "$app_root"
sudo chown -R debian:www-data "$app_root"

install -m 0640 "$source_env" "$app_root/.env"
sudo chown debian:www-data "$app_root/.env"

database_password="$(openssl rand -hex 32)"
sudo mariadb <<SQL
CREATE DATABASE IF NOT EXISTS filyx CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'filyx_app'@'localhost' IDENTIFIED BY '${database_password}';
ALTER USER 'filyx_app'@'localhost' IDENTIFIED BY '${database_password}';
GRANT ALL PRIVILEGES ON filyx.* TO 'filyx_app'@'localhost';
FLUSH PRIVILEGES;
SQL

sudo install -d -o root -g root -m 0700 "$backup_root"
sudo install -o root -g root -m 0600 "$source_sql" "$backup_sql"
sudo bash -c "mariadb filyx < '$backup_sql'"

set_env() {
  local name="$1"
  local value="$2"
  local file="$app_root/.env"
  local temporary
  temporary="$(mktemp)"
  if grep -q "^${name}=" "$file"; then
    sed "s|^${name}=.*|${name}=${value}|" "$file" > "$temporary"
  else
    cat "$file" > "$temporary"
    printf '\n%s=%s\n' "$name" "$value" >> "$temporary"
  fi
  mv "$temporary" "$file"
}

set_env 'DB_HOST' '127.0.0.1'
set_env 'DB_PORT' '3306'
set_env 'DB_NAME' 'filyx'
set_env 'DB_USER' 'filyx_app'
set_env 'DB_PASS' "$database_password"
set_env 'APP_DEBUG' 'false'
chmod 0640 "$app_root/.env"
sudo chown debian:www-data "$app_root/.env"

sudo install -d -o www-data -g www-data -m 0770 "$app_root/apps/web/storage/logs"
sudo install -d -o www-data -g www-data -m 0770 "$app_root/apps/web/storage/private"
sudo install -d -o debian -g www-data -m 0750 "$app_root/apps/bot-engine/runtime/logs"
sudo install -d -o debian -g www-data -m 0750 "$app_root/apps/bot-engine/runtime/secure"
sudo chown -R debian:www-data "$app_root/apps/bot-engine/runtime/secure"
sudo chmod 0750 "$app_root/apps/bot-engine/runtime/secure"

rm -f "$archive" "$source_env" "$source_sql"
table_count="$(sudo mariadb -N -e "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'filyx' AND table_type = 'BASE TABLE'")"
test "$table_count" -gt 0
printf 'FILYX_DATABASE_IMPORTED_TABLES_%s\n' "$table_count"
