#!/usr/bin/env python3
"""CLI script to bulk-import and analyze domains from a CSV file.

Usage:
    python scripts/import_csv.py domains.csv
    
CSV format: one domain per line, or a column named 'domain'.
"""
import sys
import csv
import os

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from app.database import SessionLocal, init_db
from app.models import Domain
from app.services.aura import analyze_domain
from app.services.validators import validate_analysis
import datetime


def import_csv(filepath: str):
    init_db()
    db = SessionLocal()

    domains = []
    with open(filepath, "r") as f:
        reader = csv.reader(f)
        header = next(reader, None)

        domain_col = 0
        if header:
            for i, col in enumerate(header):
                if col.strip().lower() in ("domain", "domains", "url", "name"):
                    domain_col = i
                    break
            else:
                domains.append(header[0].strip())

        for row in reader:
            if row and row[domain_col].strip():
                domains.append(row[domain_col].strip().lower())

    domains = list(set(domains))
    print(f"Found {len(domains)} unique domains to analyze.")

    validation_summary = {"total": 0, "valid": 0, "repaired": 0, "errors": 0}

    for i, domain_name in enumerate(domains, 1):
        print(f"\n[{i}/{len(domains)}] Analyzing {domain_name}...")

        existing = db.query(Domain).filter(Domain.domain == domain_name).first()

        try:
            analysis = analyze_domain(domain_name)

            analysis, report = validate_analysis(analysis, auto_repair=True)
            validation_summary["total"] += 1

            if report.is_valid:
                validation_summary["valid"] += 1
            else:
                validation_summary["errors"] += 1

            if report.repairs:
                validation_summary["repaired"] += 1
                print(f"  Validation: {len(report.repairs)} auto-repairs applied")
                for r in report.repairs:
                    print(f"    - {r['field']}: {r['action']}")

            if report.errors:
                print(f"  Validation: {len(report.errors)} errors")
                for e in report.errors:
                    print(f"    - {e['field']}: {e['message']}")

            if report.warnings:
                print(f"  Validation: {len(report.warnings)} warnings")

            niches = analysis.get("niches", [])
            print(f"  Found {len(niches)} niches.")
            if niches:
                top = niches[0]
                print(f"  Top niche: {top.get('name')} (Score: {top.get('score')}/10)")

            if existing:
                existing.analysis = analysis
                existing.analyzed_at = datetime.datetime.utcnow()
            else:
                new_domain = Domain(
                    domain=domain_name,
                    analysis=analysis,
                    analyzed_at=datetime.datetime.utcnow(),
                )
                db.add(new_domain)

            db.commit()
            print(f"  Saved to database (validation score: {report.score}/100).")

        except Exception as e:
            print(f"  ERROR: {e}")
            continue

    db.close()
    print(f"\nDone! Processed {len(domains)} domains.")
    print(f"Validation summary: {validation_summary['valid']}/{validation_summary['total']} valid, "
          f"{validation_summary['repaired']} repaired, {validation_summary['errors']} with errors")


if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage: python scripts/import_csv.py <csv_file>")
        sys.exit(1)

    import_csv(sys.argv[1])
