#!/bin/bash
set -e

DEMO_PERF=0
TYPE="dev"
for arg in "$@"; do
  case "$arg" in
    --demo-performance)
      DEMO_PERF=1
      shift
      ;;
    --type=*)
      TYPE="${arg#*=}"
      shift
      ;;
  esac
done

# Set DB_HOST based on TYPE
if [ "$TYPE" = "prod" ]; then
  DB_HOST="localhost"
else
  DB_HOST="postgres"
fi

# Deployment script for TAF
# 1. Reset any local changes
# 2. Pull latest code
# 3. Recreate database from TAFDB.sql
# 4. Import test users
# 5. Import demo data

REPO_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$REPO_DIR"

# Remove local edits and clean untracked files
# git reset --hard
# git clean -fd

# Pull latest code from remote
# if ! git pull --no-rebase; then
#     echo "git pull failed. Please ensure the repository has a remote configured." >&2
# fi

DB_USER=${DB_USER:-taf}
DB_PASS=${DB_PASS:-TAF123*}
DB_NAME=${DB_NAME:-devdb}

PSQL_CMD=(psql -v ON_ERROR_STOP=1 -h "$DB_HOST" -U "$DB_USER" -d "$DB_NAME")
if [ -n "$DB_PASS" ]; then
    export PGPASSWORD="$DB_PASS"
fi

# Drop and recreate database
psql -h "$DB_HOST" -U taf -d postgres -v ON_ERROR_STOP=1 -c "DROP DATABASE IF EXISTS $DB_NAME;"
#psql -h postgres -U taf -d postgres -v ON_ERROR_STOP=1 -c "DO \$\$ BEGIN IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = '$DB_USER') THEN CREATE ROLE $DB_USER LOGIN PASSWORD '$DB_PASS'; END IF; END \$\$;"
psql -h "$DB_HOST" -U taf -d postgres -v ON_ERROR_STOP=1 -c "CREATE DATABASE $DB_NAME OWNER $DB_USER;"


psql -h "$DB_HOST" -U taf -d "$DB_NAME" -v ON_ERROR_STOP=1 \
  -c "CREATE EXTENSION IF NOT EXISTS pg_uuidv7       WITH SCHEMA public;
      CREATE EXTENSION IF NOT EXISTS citext          WITH SCHEMA public;
      CREATE EXTENSION IF NOT EXISTS ltree           WITH SCHEMA public;
      CREATE EXTENSION IF NOT EXISTS pgcrypto        WITH SCHEMA public;"

# Import base schema
${PSQL_CMD[@]} -d "$DB_NAME" -f "$REPO_DIR/TAFDB.pgsql"

#create triggers
psql -h "$DB_HOST" -U taf -d "$DB_NAME" -v ON_ERROR_STOP=1 -f "$REPO_DIR/triggers.sql"

# Import test users if file provided
TEST_USERS_FILE="$REPO_DIR/test_users.sql"
if [ -f "$TEST_USERS_FILE" ]; then
    echo "Importing test users from $TEST_USERS_FILE"
    ${PSQL_CMD[@]} -d "$DB_NAME" -f "$TEST_USERS_FILE"
else
    echo "No test_users.sql file found. Skipping test user creation."
fi
# Import Sql files
DEMO_DIR="$REPO_DIR/sql"
if [ -d "$DEMO_DIR" ]; then
    for f in "$DEMO_DIR"/*.sql; do
        [ -e "$f" ] || continue
        echo "Importing SQL from $f"
        ${PSQL_CMD[@]} -d "$DB_NAME" -f "$f"
    done
else
    echo "No SQL directory found. Skipping SQL import."
fi

# Import demo data
DEMO_DIR="$REPO_DIR/demoData"
if [ -z "$SKIP_DEMO" ] && [ -d "$DEMO_DIR" ]; then
    for f in "$DEMO_DIR"/*.sql; do
        [ -e "$f" ] || continue
        echo "Importing demo data from $f"
        ${PSQL_CMD[@]} -d "$DB_NAME" -f "$f" || true
    done
else
    echo "Skipping demo data import"
fi

if [ "$DEMO_PERF" -eq 1 ]; then
    echo "Seeding performance demo data"
    php "$REPO_DIR/cli/performance_demo.php"
fi

unset PGPASSWORD

