"""Fiko Film Stüdyosu - WanGP Köprü servisini başlatma scripti.

WanGP'nin kendi venv'i ile çalıştırılmalıdır (torch, transformers vb. zaten orada):

    set "VENV_PY=D:/.../Wan2GP/env_venv/Scripts/python.exe"
    "%VENV_PY%" baslat.py --wangp-root "D:/.../Wan2GP" --port 7861

Sadece loopback (127.0.0.1) dinler. Flutter masaüstü uygulaması bu portu kullanır.
"""

from __future__ import annotations

import argparse
import logging
import sys
from pathlib import Path


def argumanlari_oku() -> argparse.Namespace:
    parser = argparse.ArgumentParser(
        description="Fiko Film Stüdyosu - WanGP Köprü servisi (FastAPI + Uvicorn)",
    )
    parser.add_argument(
        "--wangp-root",
        type=str,
        required=True,
        help="WanGP/Wan2GP kök dizini (ör: D:/.../LTX-Desktop-WanGP/Wan2GP)",
    )
    parser.add_argument(
        "--port",
        type=int,
        default=7861,
        help="Dinlenecek port (varsayılan 7861)",
    )
    parser.add_argument(
        "--host",
        type=str,
        default="127.0.0.1",
        help="Dinleme adresi (varsayılan 127.0.0.1, sadece loopback)",
    )
    parser.add_argument(
        "--cikti-dizini",
        type=str,
        default=None,
        help="WanGP üretim çıktı klasörü (varsayılan WanGP'nin save_path'i)",
    )
    parser.add_argument(
        "--yukleme-dizini",
        type=str,
        default=None,
        help="POST /upload ile gelen dosyaların kaydedileceği klasör",
    )
    parser.add_argument(
        "--reload",
        action="store_true",
        help="Geliştirme: kod değişikliğinde otomatik yeniden başlat",
    )
    parser.add_argument(
        "--log-seviye",
        type=str,
        default="info",
        choices=["debug", "info", "warning", "error"],
        help="Uvicorn log seviyesi",
    )
    return parser.parse_args()


def main() -> int:
    args = argumanlari_oku()

    wangp_kok = Path(args.wangp_root).resolve()
    if not wangp_kok.is_dir():
        print(f"[HATA] WanGP kök dizini bulunamadı: {wangp_kok}", file=sys.stderr)
        return 2

    api_dosyasi = wangp_kok / "shared" / "api.py"
    if not api_dosyasi.is_file():
        print(
            f"[HATA] {api_dosyasi} bulunamadı. --wangp-root parametresi yanlış olabilir.",
            file=sys.stderr,
        )
        return 2

    # kopru klasörünü import path'e ekle
    bu_dosya = Path(__file__).resolve()
    sys.path.insert(0, str(bu_dosya.parent))

    # FastAPI uygulamasını import et ve ayarla
    import wangp_bridge  # noqa: WPS433

    wangp_bridge.ayarlari_kur(
        wangp_root=wangp_kok,
        cikti_dizini=args.cikti_dizini,
        yukleme_dizini=args.yukleme_dizini,
    )

    # Uvicorn'u başlat
    import uvicorn  # noqa: WPS433

    logging.getLogger("fiko-kopru").setLevel(logging.INFO)

    print("=" * 60)
    print(" Fiko Film Stüdyosu - WanGP Köprü Servisi")
    print("=" * 60)
    print(f" WanGP kök   : {wangp_kok}")
    print(f" Dinleme     : http://{args.host}:{args.port}")
    print(f" Reload      : {args.reload}")
    print(f" Endpoints   : /jobs, /modeller, /loralar, /saglik")
    print("=" * 60)

    if args.reload:
        # reload modunda app'i string olarak vermek gerekiyor
        uvicorn.run(
            "wangp_bridge:uygulama",
            host=args.host,
            port=args.port,
            reload=True,
            log_level=args.log_seviye,
        )
    else:
        uvicorn.run(
            wangp_bridge.uygulama,
            host=args.host,
            port=args.port,
            log_level=args.log_seviye,
        )

    return 0


if __name__ == "__main__":
    sys.exit(main())
