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

PROJECT_ROOT="/home/intel145/websites"
SYSTEM_ROOT="${PROJECT_ROOT}/system"
APPS_ROOT="${PROJECT_ROOT}/apps"

APP_NAME="${1:-defapp}"

CURRENT_SYSTEM_ENV="${SYSTEM_ROOT}/.env"
CURRENT_APP_ENV="${APPS_ROOT}/${APP_NAME}/.env"

CONFIG_ROOT="${SYSTEM_ROOT}/config"
APP_CONFIG_ROOT="${CONFIG_ROOT}/apps/${APP_NAME}"

DATA_ROOT="${SYSTEM_ROOT}/data"
SESSION_ROOT="${DATA_ROOT}/sessions"
APP_DATA_ROOT="${DATA_ROOT}/apps/${APP_NAME}"

LOG_ROOT="${APP_DATA_ROOT}/logs"
TRACE_ROOT="${APP_DATA_ROOT}/traces"
CACHE_ROOT="${APP_DATA_ROOT}/cache"
TMP_ROOT="${APP_DATA_ROOT}/tmp"
EXPORT_ROOT="${APP_DATA_ROOT}/exports"

timestamp="$(date +%Y%m%d-%H%M%S)"
backup_root="${SYSTEM_ROOT}/backup/phase2-${timestamp}"

echo "=============================================================="
echo "Phase 2 prepare: private configuration and data structure"
echo "=============================================================="
echo "Project root : ${PROJECT_ROOT}"
echo "System root  : ${SYSTEM_ROOT}"
echo "Apps root    : ${APPS_ROOT}"
echo "App name     : ${APP_NAME}"
echo "Backup root  : ${backup_root}"
echo

if [[ ! -d "${PROJECT_ROOT}" ]]; then
    echo "ERROR: Project root does not exist: ${PROJECT_ROOT}" >&2
    exit 1
fi

if [[ ! -d "${SYSTEM_ROOT}" ]]; then
    echo "ERROR: System root does not exist: ${SYSTEM_ROOT}" >&2
    exit 1
fi

if [[ ! -d "${APPS_ROOT}/${APP_NAME}" ]]; then
    echo "ERROR: Application directory does not exist: ${APPS_ROOT}/${APP_NAME}" >&2
    exit 1
fi

if [[ ! -f "${CURRENT_SYSTEM_ENV}" ]]; then
    echo "ERROR: Current system .env does not exist: ${CURRENT_SYSTEM_ENV}" >&2
    exit 1
fi

if [[ ! -f "${CURRENT_APP_ENV}" ]]; then
    echo "WARNING: Current app .env does not exist: ${CURRENT_APP_ENV}" >&2
    echo "Continuing because the app .env is optional."
fi

echo "Creating private configuration directories..."
mkdir -p "${CONFIG_ROOT}"
mkdir -p "${CONFIG_ROOT}/apps"
mkdir -p "${APP_CONFIG_ROOT}"

echo "Creating private runtime-data directories..."
mkdir -p "${DATA_ROOT}"
mkdir -p "${SESSION_ROOT}"
mkdir -p "${DATA_ROOT}/apps"
mkdir -p "${APP_DATA_ROOT}"
mkdir -p "${LOG_ROOT}"
mkdir -p "${TRACE_ROOT}"
mkdir -p "${CACHE_ROOT}"
mkdir -p "${TMP_ROOT}"
mkdir -p "${EXPORT_ROOT}"

echo "Creating backup directory..."
mkdir -p "${backup_root}"

echo "Backing up current environment files..."
cp -p "${CURRENT_SYSTEM_ENV}" \
    "${backup_root}/system.env.backup"

if [[ -f "${CURRENT_APP_ENV}" ]]; then
    cp -p "${CURRENT_APP_ENV}" \
        "${backup_root}/${APP_NAME}.env.backup"
fi

echo "Copying configuration into new private locations..."
cp -p "${CURRENT_SYSTEM_ENV}" \
    "${CONFIG_ROOT}/.env"

if [[ -f "${CURRENT_APP_ENV}" ]]; then
    cp -p "${CURRENT_APP_ENV}" \
        "${APP_CONFIG_ROOT}/.env"
fi

echo "Applying restrictive permissions..."
chmod 700 "${CONFIG_ROOT}"
chmod 700 "${CONFIG_ROOT}/apps"
chmod 700 "${APP_CONFIG_ROOT}"

chmod 700 "${DATA_ROOT}"
chmod 700 "${SESSION_ROOT}"
chmod 700 "${DATA_ROOT}/apps"
chmod 700 "${APP_DATA_ROOT}"
chmod 700 "${LOG_ROOT}"
chmod 700 "${TRACE_ROOT}"
chmod 700 "${CACHE_ROOT}"
chmod 700 "${TMP_ROOT}"
chmod 700 "${EXPORT_ROOT}"

chmod 600 "${CONFIG_ROOT}/.env"

if [[ -f "${APP_CONFIG_ROOT}/.env" ]]; then
    chmod 600 "${APP_CONFIG_ROOT}/.env"
fi

echo
echo "=============================================================="
echo "Prepared successfully. No old .env file was removed."
echo "=============================================================="
echo
echo "New shared config:"
echo "  ${CONFIG_ROOT}/.env"
echo
echo "New app config:"
echo "  ${APP_CONFIG_ROOT}/.env"
echo
echo "New shared session storage:"
echo "  ${SESSION_ROOT}"
echo
echo "New app runtime data:"
echo "  ${APP_DATA_ROOT}"
echo
echo "Next steps:"
echo "  1. Update only paths.php to load:"
echo "     ${CONFIG_ROOT}/.env"
echo "     ${APP_CONFIG_ROOT}/.env"
echo
echo "  2. Run:"
echo "     php ${SYSTEM_ROOT}/php/paths.cli.php --app=${APP_NAME} --show-all"
echo
echo "  3. Test the browser application."
echo
echo "  4. Only after both pass, remove old public app .env:"
echo "     ${CURRENT_APP_ENV}"
echo
echo "  5. Do not remove old ${CURRENT_SYSTEM_ENV} until paths.php"
echo "     is confirmed to load the new system/config/.env."
echo
