"""
Management commands for the FastAPI application.
"""

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


@click.group()
def cli():
    """FastAPI application management commands."""
    pass


@cli.command()
@click.option('--verbose', '-v', is_flag=True, help='Enable verbose logging')
def seed(verbose):
    """Run database seeders."""
    log_level = logging.DEBUG if verbose else logging.INFO
    logging.basicConfig(
        level=log_level,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    logger = logging.getLogger(__name__)
    
    try:
        logger.info("Starting database seeding...")
        runner = SeederRunner()
        runner.run_all()
        logger.info("Database seeding completed successfully!")
    except Exception as e:
        logger.error(f"Seeding failed: {e}")
        raise click.ClickException(f"Seeding failed: {e}")


@cli.command()
@click.argument('seeder_name')
@click.option('--verbose', '-v', is_flag=True, help='Enable verbose logging')
def seed_specific(seeder_name, verbose):
    """Run a specific seeder by name."""
    log_level = logging.DEBUG if verbose else logging.INFO
    logging.basicConfig(
        level=log_level,
        format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    )
    
    logger = logging.getLogger(__name__)
    
    try:
        logger.info(f"Running seeder: {seeder_name}")
        runner = SeederRunner()
        runner.run_seeder(seeder_name)
        logger.info(f"Seeder {seeder_name} completed successfully!")
    except Exception as e:
        logger.error(f"Seeder {seeder_name} failed: {e}")
        raise click.ClickException(f"Seeder failed: {e}")


@cli.command()
def list_seeders():
    """List available seeders."""
    runner = SeederRunner()
    available_seeders = [sc.__name__ for sc in runner.seeders]
    
    click.echo("Available seeders:")
    for seeder in available_seeders:
        click.echo(f"  - {seeder}")


if __name__ == '__main__':
    cli()
