#!/usr/bin/env bash
# Migrate legacy run/ layout to .run/run.config.json + .run/.env
set -euo pipefail

# shellcheck source=workspace.sh
source "$(dirname "${BASH_SOURCE[0]}")/workspace.sh"
resolve_workspace "${RUN_WORKSPACE_DIR:-${PWD}}"

# shellcheck source=common.sh
source "$(dirname "${BASH_SOURCE[0]}")/common.sh"

legacy="${WORKSPACE_DIR}/run"
legacy_env="${legacy}/.env"
RUN_DIR="${WORKSPACE_DIR}/.run"
ENV_FILE="${RUN_DIR}/.env"
WORKSPACE_CONFIG="${RUN_DIR}/run.config.json"
mkdir -p "${RUN_DIR}"
force=false

while [ $# -gt 0 ]; do
  case "$1" in
    --force|-f) force=true; shift ;;
    *) echo "unknown option: $1" >&2; exit 1 ;;
  esac
done

if [ ! -f "${legacy_env}" ]; then
  echo "error: ${legacy_env} not found" >&2
  exit 1
fi

"${RUN_PYTHON:-python3}" - "${legacy_env}" "${ENV_FILE}" "${WORKSPACE_CONFIG}" "${WORKSPACE_DIR}" <<'PY'
import json, os, re, sys

legacy_env, target_env, target_json, workspace = sys.argv[1:5]
workspace = os.path.abspath(workspace)
answers = {}
with open(legacy_env, encoding="utf-8") as fh:
    for line in fh:
        line = line.strip()
        if not line or line.startswith("#") or "=" not in line:
            continue
        key, value = line.split("=", 1)
        value = value.strip().strip('"')
        if key in ("BACKEND_DIR", "FRONTEND_DIR") and value.startswith("../"):
            value = "./" + value[3:]
        answers[key] = value

with open(target_env, "w", encoding="utf-8") as out:
    with open(legacy_env, encoding="utf-8") as src:
        for line in src:
            match = re.match(r"^([A-Za-z_][A-Za-z0-9_]*)=(.*)$", line.strip())
            if match and match.group(1) in answers:
                out.write(f"{match.group(1)}={answers[match.group(1)]}\n")
            else:
                out.write(line)

data = {}
for key, value in answers.items():
    if value in ("true", "false"):
        data[key] = value == "true"
    elif value.isdigit():
        data[key] = int(value)
    else:
        data[key] = value
with open(target_json, "w", encoding="utf-8") as fh:
    json.dump(data, fh, indent=2)
    fh.write("\n")
PY

for f in docker-compose.packages.yml docker-compose.override.yml .host-open.log; do
  [ -f "${legacy}/${f}" ] && mv "${legacy}/${f}" "${RUN_DIR}/${f}"
done

ensure_workspace_gitignore

echo "Migrated to ${WORKSPACE_CONFIG} and ${ENV_FILE}"
if [ "${force}" = true ]; then
  rm -rf "${legacy}"
  echo "Removed ${legacy}/"
else
  echo "Legacy ${legacy}/ kept — remove it after verifying, or rerun with --force"
fi
