from django.core.management.base import BaseCommand, CommandError
from django.conf import settings
from extractly.models import AdsManual, Ads

# Analyzer lives here
from manual_agregator.visual_viewer.data_visual import AdvancedDjangoDataAnalyzer


class Command(BaseCommand):
    help = (
        "Generate an advanced data quality visual analysis for Ads/AdsManual "
        "and export an HTML dashboard (and optional CSV)."
    )

    def add_arguments(self, parser):
        parser.add_argument(
            "--model",
            choices=["adsmanual", "ads"],
            default="adsmanual",
            help="Which model to analyze (default: adsmanual)",
        )
        parser.add_argument(
            "--group-by",
            dest="group_by",
            default="estate_type",
            help="Model field to group by in analysis (default: estate_type)",
        )
        parser.add_argument(
            "--html",
            dest="html_file",
            default="advanced_data_quality_report.html",
            help="Output HTML filename (default: advanced_data_quality_report.html)",
        )
        parser.add_argument(
            "--csv",
            dest="csv_file",
            default=None,
            help="Optional CSV export filename (disabled by default)",
        )

    def handle(self, *args, **options):
        model_choice = options["model"].lower()
        group_by = options["group_by"].strip() or "estate_type"
        html_file = options["html_file"]
        csv_file = options["csv_file"]

        model_cls = AdsManual if model_choice == "adsmanual" else Ads

        self.stdout.write(self.style.NOTICE(
            f"Analyzing model: {model_cls.__name__} (table: {model_cls._meta.db_table})"
        ))
        self.stdout.write(self.style.NOTICE(f"Grouping by: {group_by}"))

        try:
            analyzer = AdvancedDjangoDataAnalyzer(model_class=model_cls, estate_type_field=group_by)
            analyzer.analyze_data_quality()
            analyzer.create_advanced_visualizations()
            analyzer.generate_html_report(filename=html_file)

            if csv_file:
                analyzer.export_to_csv(filename=csv_file)

            self.stdout.write(self.style.SUCCESS(
                f"✅ Report generated: {html_file}"
            ))
            if csv_file:
                self.stdout.write(self.style.SUCCESS(
                    f"✅ CSV exported: {csv_file}"
                ))
        except Exception as exc:
            raise CommandError(f"Analysis failed: {exc}")
