#!/usr/bin/env python3
from __future__ import annotations

import argparse
import os
import subprocess
import sys
from pathlib import Path

ROOT_DIR = Path(__file__).resolve().parent
REQUIREMENTS = ROOT_DIR / "requirements.txt"
EXPORT_DIR = ROOT_DIR / "exports"


def install_requirements() -> None:
    if not REQUIREMENTS.exists():
        raise SystemExit("Brak pliku requirements.txt")
    subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", str(REQUIREMENTS)])


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Lokalne uruchamianie symulatora kredytu bez Dockera.")
    parser.add_argument("--host", default="127.0.0.1", help="Adres hosta, domyślnie 127.0.0.1")
    parser.add_argument("--port", type=int, default=8047, help="Port, domyślnie 8047")
    parser.add_argument("--no-reload", action="store_true", help="Wyłącz auto-reload podczas developmentu")
    parser.add_argument("--install", action="store_true", help="Zainstaluj zależności z requirements.txt przed startem")
    return parser.parse_args()


def main() -> None:
    args = parse_args()
    os.chdir(ROOT_DIR)
    EXPORT_DIR.mkdir(parents=True, exist_ok=True)
    os.environ.setdefault("MORTGAGE_EXPORT_DIR", str(EXPORT_DIR))

    if args.install:
        install_requirements()

    try:
        import uvicorn
    except ModuleNotFoundError:
        print("Brak zależności. Uruchom:")
        print("  python dev.py --install")
        print("albo:")
        print("  python -m pip install -r requirements.txt")
        raise SystemExit(1)

    print(f"Start: http://{args.host}:{args.port}")
    uvicorn.run(
        "app.main:app",
        host=args.host,
        port=args.port,
        reload=not args.no_reload,
        app_dir=str(ROOT_DIR),
    )


if __name__ == "__main__":
    main()
