#!/usr/bin/env python3
"""
HK Racing Analytics - Setup Script
Initializes database and verifies installation
"""
import sys
import os
from pathlib import Path

# Add backend to path
backend_path = Path(__file__).parent / "backend"
sys.path.insert(0, str(backend_path))

from loguru import logger


def check_dependencies():
    """Check if required packages are installed"""
    logger.info("Checking dependencies...")
    
    required = [
        "fastapi",
        "uvicorn",
        "sqlmodel",
        "pandas",
        "requests",
        "beautifulsoup4",
        "xgboost"
    ]
    
    missing = []
    for package in required:
        try:
            __import__(package)
            logger.info(f"  ✓ {package}")
        except ImportError:
            logger.warning(f"  ✗ {package} (missing)")
            missing.append(package)
    
    if missing:
        logger.error(f"\nMissing packages: {', '.join(missing)}")
        logger.info(f"Run: pip install {' '.join(missing)}")
        return False
    
    return True


def init_database():
    """Initialize database and create tables"""
    logger.info("\nInitializing database...")
    
    try:
        from app.db.database import init_db
        init_db()
        logger.info("  ✓ Database initialized")
        return True
    except Exception as e:
        logger.error(f"  ✗ Database error: {e}")
        return False


def create_directories():
    """Create required directories"""
    logger.info("\nCreating directories...")
    
    dirs = [
        "logs",
        "models",
        "data/raw",
        "data/processed"
    ]
    
    for d in dirs:
        path = Path(__file__).parent / d
        path.mkdir(parents=True, exist_ok=True)
        logger.info(f"  ✓ {d}/")
    
    return True


def verify_structure():
    """Verify project structure"""
    logger.info("\nVerifying project structure...")
    
    required_files = [
        "backend/app/main.py",
        "backend/app/core/config.py",
        "backend/app/db/database.py",
        "backend/app/models/racing.py",
        "backend/app/api/races.py",
        "backend/app/api/predictions.py",
        "backend/requirements.txt",
        "data_pipeline/collectors/hkjc_collector.py",
        "data_pipeline/feature_engineering/feature_builder.py",
        "data_pipeline/training/model_trainer.py"
    ]
    
    all_exist = True
    for file in required_files:
        path = Path(__file__).parent / file
        if path.exists():
            logger.info(f"  ✓ {file}")
        else:
            logger.warning(f"  ✗ {file} (missing)")
            all_exist = False
    
    return all_exist


def main():
    """Run setup"""
    logger.info("=" * 60)
    logger.info("HK Racing Analytics - Setup")
    logger.info("=" * 60)
    
    # Check dependencies
    deps_ok = check_dependencies()
    
    # Create directories
    dirs_ok = create_directories()
    
    # Verify structure
    struct_ok = verify_structure()
    
    # Initialize database
    if deps_ok:
        db_ok = init_database()
    else:
        db_ok = False
        logger.warning("\nSkipping database init (install dependencies first)")
    
    # Summary
    logger.info("\n" + "=" * 60)
    logger.info("Setup Summary")
    logger.info("=" * 60)
    logger.info(f"Dependencies: {'✓ OK' if deps_ok else '✗ Missing packages'}")
    logger.info(f"Directories:  {'✓ OK' if dirs_ok else '✗ Failed'}")
    logger.info(f"Structure:    {'✓ OK' if struct_ok else '✗ Missing files'}")
    logger.info(f"Database:     {'✓ OK' if db_ok else '✗ Not initialized'}")
    
    if all([deps_ok, dirs_ok, struct_ok, db_ok]):
        logger.info("\n✅ Setup complete!")
        logger.info("\nNext steps:")
        logger.info("  1. Run: uvicorn app.main:app --reload")
        logger.info("  2. Open: http://localhost:8000/docs")
        return 0
    else:
        logger.error("\n❌ Setup incomplete. Fix issues above.")
        return 1


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