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

import argparse
import os
import sys
from http.server import ThreadingHTTPServer
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
if str(ROOT) not in sys.path:
    sys.path.insert(0, str(ROOT))

from services.api.local_server import make_handler
from services.api.production_app import create_production_api


DEFAULT_ROOT = ROOT / "outputs" / "production"


def main() -> int:
    parser = argparse.ArgumentParser(description="Serve the local production-mode AI desktop pet app.")
    parser.add_argument("--host", default=os.environ.get("AI_PET_HOST", "127.0.0.1"))
    parser.add_argument("--port", type=int, default=int(os.environ.get("AI_PET_PORT", "8765")))
    parser.add_argument("--state-dir", type=Path, default=Path(os.environ.get("AI_PET_STATE_DIR", DEFAULT_ROOT / "state")))
    parser.add_argument("--storage-dir", type=Path, default=Path(os.environ.get("AI_PET_STORAGE_DIR", DEFAULT_ROOT / "media")))
    parser.add_argument("--output-dir", type=Path, default=Path(os.environ.get("AI_PET_OUTPUT_DIR", DEFAULT_ROOT / "pet_builds")))
    args = parser.parse_args()

    api = create_production_api(
        state_dir=args.state_dir,
        storage_dir=args.storage_dir,
        output_dir=args.output_dir,
    )
    server = ThreadingHTTPServer((args.host, args.port), make_handler(api=api, web_root=ROOT))
    print(f"Serving production-mode AI desktop pet app at http://{args.host}:{args.port}/apps/web/index.html")
    print(f"Serving production-mode API at http://{args.host}:{args.port}/api")
    server.serve_forever()
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
