#!/usr/bin/env python3
"""
Command-line script for running database seeders.

Usage:
    python seed.py                    # Run all seeders
    python seed.py --seeder UserSeeder  # Run specific seeder
    python seed.py --help             # Show help
"""

import sys
import argparse
import logging
from pathlib import Path

# Add the project root to Python path
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

from src.apps.base.seeders.runner import SeederRunner


def main():
    """Main entry point for the seeder CLI."""
    parser = argparse.ArgumentParser(
        description="Run database seeders for the FastAPI application",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog="""
Examples:
  python seed.py                      Run all seeders
  python seed.py --seeder UserSeeder  Run only the UserSeeder
  python seed.py --list              List available seeders
        """
    )
    
    parser.add_argument(
        "--seeder",
        type=str,
        help="Name of specific seeder to run (e.g., UserSeeder)"
    )
    
    parser.add_argument(
        "--list",
        action="store_true",
        help="List available seeders"
    )
    
    parser.add_argument(
        "--verbose", "-v",
        action="store_true",
        help="Enable verbose logging"
    )
    
    args = parser.parse_args()
    
    # Configure logging
    log_level = logging.DEBUG if args.verbose else logging.INFO
    logging.basicConfig(
        level=log_level,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    logger = logging.getLogger(__name__)
    
    try:
        runner = SeederRunner()
        
        if args.list:
            # List available seeders
            available_seeders = [sc.__name__ for sc in runner.seeders]
            print("Available seeders:")
            for seeder in available_seeders:
                print(f"  - {seeder}")
            return
        
        if args.seeder:
            # Run specific seeder
            logger.info(f"Running seeder: {args.seeder}")
            runner.run_seeder(args.seeder)
        else:
            # Run all seeders
            logger.info("Running all seeders...")
            runner.run_all()
        
        logger.info("Seeding operation completed successfully!")
        
    except Exception as e:
        logger.error(f"Seeding failed: {e}")
        sys.exit(1)


if __name__ == "__main__":
    main()
