#!/usr/bin/env python3
"""Start both FastAPI and Vite dev servers for development."""

import os
import signal
import subprocess
import sys
import time

ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


def main():
    # Pre-flight: ensure the database exists before starting servers
    db_path = os.path.join(ROOT, "data", "claude.db")
    if not os.path.exists(db_path):
        print("Error: data/claude.db not found. Run 'uv run scripts/build-db' first.",
              file=sys.stderr)
        sys.exit(1)

    # Start FastAPI backend on port 8000
    api = subprocess.Popen(
        [sys.executable, "-m", "uvicorn", "claude_timeline.server.app:app",
         "--host", "127.0.0.1", "--port", "8000", "--reload"],
        cwd=ROOT,
    )

    # Start Vite dev server (defaults to port 5173)
    vite = subprocess.Popen(
        ["npm", "run", "dev"],
        cwd=os.path.join(ROOT, "frontend"),
    )

    def cleanup(sig, frame):
        api.terminate()
        vite.terminate()
        sys.exit(0)

    signal.signal(signal.SIGINT, cleanup)
    signal.signal(signal.SIGTERM, cleanup)

    try:
        # Poll both processes; if either exits, tear both down
        while True:
            if api.poll() is not None:
                print("API server exited.", file=sys.stderr)
                break
            if vite.poll() is not None:
                print("Vite dev server exited unexpectedly.", file=sys.stderr)
                break
            time.sleep(0.5)
    except KeyboardInterrupt:
        pass
    finally:
        api.terminate()
        vite.terminate()


if __name__ == "__main__":
    main()
