#!/usr/bin/env python3
"""
Publishing Integrity Runner — main entry point for scheduled runs.

Usage:
    python -m publishing_integrity.runner morning
    python -m publishing_integrity.runner midday
    python -m publishing_integrity.runner pregame
    python -m publishing_integrity.runner --dry-run morning
    python -m publishing_integrity.runner --league nba morning
"""

import os
import sys
import argparse
import logging
import json
from datetime import datetime, timezone

# Ensure the scripts directory is on the path
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from publishing_integrity.config import LOG_DIR, LOG_FILE
from publishing_integrity.enums import RunType
from publishing_integrity.scheduling import run_validation

# ── Logging setup ───────────────────────────────────────────────────────────
os.makedirs(LOG_DIR, exist_ok=True)
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s [%(levelname)s] %(message)s",
    handlers=[
        logging.FileHandler(LOG_FILE),
        logging.StreamHandler(sys.stdout),
    ],
)
log = logging.getLogger("pub-integrity")


RUN_TYPE_MAP = {
    "morning": RunType.MORNING_FULL,
    "midday": RunType.MIDDAY_CONFIRM,
    "pregame": RunType.PRE_GAME_FINAL,
    "manual": RunType.MANUAL,
}


def main():
    parser = argparse.ArgumentParser(description="Rainmaker Publishing Integrity Runner")
    parser.add_argument("run_type", choices=["morning", "midday", "pregame", "manual"],
                        help="Type of validation run")
    parser.add_argument("--dry-run", action="store_true",
                        help="Don't modify any data, just report")
    parser.add_argument("--league", type=str, default=None,
                        help="Run for a specific league only")
    args = parser.parse_args()

    run_type = RUN_TYPE_MAP[args.run_type]
    leagues = [args.league] if args.league else None

    log.info(f"Starting {args.run_type} run at {datetime.now(timezone.utc).strftime('%Y-%m-%d %H:%M:%S ET')}")

    try:
        result = run_validation(
            run_type=run_type,
            leagues=leagues,
            dry_run=args.dry_run,
        )
        log.info(f"Run completed successfully: {json.dumps(result, indent=2, default=str)}")
        sys.exit(0)
    except Exception:
        log.exception("Run failed with error")
        sys.exit(1)


if __name__ == "__main__":
    main()
