#!/usr/bin/env bash
set -euo pipefail

cd /app

# Load docker-friendly env file (single-line KEY=VALUE).
# This avoids parsing errors from backend/.env which contains multi-line prompt text.
if [ -f /app/backend/.env.docker ]; then
  set -a
  # shellcheck disable=SC1091
  . /app/backend/.env.docker
  set +a
fi

# Best-effort DB wait: only when DATABASE_* URLs are set.
python - <<'PY' || true
import os, time, socket, urllib.parse

def wait_url(url: str, name: str, timeout_s: float = 25.0) -> None:
    if not url:
        return
    try:
        u = urllib.parse.urlparse(url)
        host = u.hostname
        port = u.port or (3306 if u.scheme.startswith("mysql") else 5432)
        if not host:
            return
    except Exception:
        return
    end = time.time() + timeout_s
    while time.time() < end:
        try:
            with socket.create_connection((host, port), timeout=2):
                print(f"{name}: reachable {host}:{port}")
                return
        except Exception:
            time.sleep(1)
    print(f"{name}: not reachable yet (continuing)")

wait_url(os.getenv("DATABASE_MASTER_URL",""), "DATABASE_MASTER_URL")
wait_url(os.getenv("DATABASE_CLUSTER_URL",""), "DATABASE_CLUSTER_URL")
PY

# Django migrations (best-effort; if DB isn't reachable, we still start the stack)
(
  cd /app/backend
  python manage.py migrate --noinput
) || true

exec /usr/bin/supervisord -c /app/docker/supervisord.conf

