"""
Docker entrypoint: parse args, init worker, run pipeline.
Usage: python -m src.main [--mock] [--worker-id ID] [--gpu-type TYPE] [--key-index 0|1|2]
"""
from __future__ import annotations

import argparse
import asyncio
import logging
import os
import sys

from .config import EnvConfig
from .worker import Worker


def setup_logging():
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s [%(levelname)s] %(name)s: %(message)s",
        datefmt="%Y-%m-%d %H:%M:%S",
        stream=sys.stdout,
    )
    logging.getLogger("httpx").setLevel(logging.WARNING)
    logging.getLogger("httpcore").setLevel(logging.WARNING)


def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="Gemini Transcription Worker")
    parser.add_argument("--mock", action="store_true", help="Run in mock mode (no real API calls)")
    parser.add_argument("--worker-id", default=None)
    parser.add_argument("--gpu-type", default=None)
    parser.add_argument("--key-index", type=int, default=None,
                        help="Which Gemini key to use as primary (0=GEMINI_KEY, 1=PROJECT2, 2=PROJECT3)")
    parser.add_argument("--max-videos", type=int, default=None,
                        help="Stop after N videos (0=unlimited). For test runs.")
    return parser.parse_args()


def main():
    setup_logging()
    args = parse_args()
    logger = logging.getLogger("main")

    if args.mock:
        os.environ["MOCK_MODE"] = "true"
    if args.worker_id:
        os.environ["WORKER_ID"] = args.worker_id
    if args.gpu_type:
        os.environ["GPU_TYPE"] = args.gpu_type
    if args.key_index is not None:
        os.environ["GEMINI_KEY_INDEX"] = str(args.key_index)
    if args.max_videos is not None:
        os.environ["MAX_VIDEOS"] = str(args.max_videos)

    config = EnvConfig()

    errors = config.validate()
    if errors:
        for e in errors:
            logger.error(f"Config error: {e}")
        sys.exit(1)

    logger.info(f"Starting worker {config.worker_id}")
    logger.info(f"  Gemini key index: {config.gemini_key_index} (of {len(config.gemini_keys)} keys)")
    logger.info(f"  Mock mode: {config.mock_mode}")
    logger.info(f"  GPU type: {config.gpu_type}")

    worker = Worker(config)
    asyncio.run(worker.start())


if __name__ == "__main__":
    main()
