#!/usr/bin/env python3
"""
Generate comparison report from all scraped analyses
"""
import os
import json
from datetime import datetime

OUTPUT_DIR = os.path.join(os.path.dirname(__file__), "output")

# Main Brazilian banks and fintechs to include
MAIN_SITES = [
    "nubank_com_br",
    "itau_com_br",
    "bradesco_com_br",
    "inter_co",
    "c6bank_com_br",
    "pagbank_com_br",
    "neon_com_br",
    "mercadopago_com_br",
    "picpay_com",
    "xpi_com_br",
    "bb_com_br",
    "santander_com_br",
]

def load_analyses():
    """Load all analysis files"""
    analyses = []

    for filename in os.listdir(OUTPUT_DIR):
        if filename.endswith("_analysis.json"):
            filepath = os.path.join(OUTPUT_DIR, filename)
            with open(filepath, 'r', encoding='utf-8') as f:
                try:
                    data = json.load(f)
                    # Extract domain from filename
                    parts = filename.replace("_analysis.json", "").rsplit("_", 2)
                    domain = parts[0] if len(parts) >= 3 else filename.split("_")[0]

                    # Only include main sites
                    if any(site in domain for site in MAIN_SITES):
                        analyses.append({
                            "domain": domain,
                            "filename": filename,
                            "data": data
                        })
                except Exception as e:
                    print(f"Error loading {filename}: {e}")

    # Remove duplicates (keep latest)
    seen = {}
    for a in sorted(analyses, key=lambda x: x["filename"], reverse=True):
        base_domain = a["domain"].split("_20")[0]  # Remove timestamp part
        if base_domain not in seen:
            seen[base_domain] = a

    return list(seen.values())

def generate_report():
    """Generate markdown comparison report"""

    analyses = load_analyses()

    # Calculate totals
    total_tokens = 0
    total_cost = 0

    rows = []
    for a in analyses:
        data = a["data"]
        analysis = data.get("analysis", {})
        metrics = data.get("metrics", {})

        empresa = analysis.get("empresa", {}) if analysis else {}
        classificacao = analysis.get("classificacao", {}) if analysis else {}
        tecnologia = analysis.get("tecnologia", {}) if analysis else {}
        seo = analysis.get("seo_marketing", {}) if analysis else {}

        tokens = metrics.get("total_tokens", 0)
        cost = metrics.get("total_cost_usd", 0)
        total_tokens += tokens
        total_cost += cost

        # Get tech level
        tech_level = tecnologia.get("nivel_modernidade", "N/A") if tecnologia else "N/A"
        if isinstance(tech_level, dict):
            tech_level = "N/A"

        seo_score = seo.get("score_seo", "N/A") if seo else "N/A"
        if isinstance(seo_score, dict):
            seo_score = "N/A"

        rows.append({
            "domain": a["domain"].replace("_", ".").replace(".com.br", "").replace(".co", "").replace("www.", ""),
            "nome": empresa.get("nome", "N/A") if empresa else "N/A",
            "categoria": classificacao.get("categoria_principal", "N/A") if classificacao else "N/A",
            "tipo": classificacao.get("tipo_site", "N/A") if classificacao else "N/A",
            "tech_level": tech_level,
            "seo_score": seo_score,
            "tokens": tokens,
            "cost": cost,
            "resumo": analysis.get("resumo_executivo", "N/A")[:100] + "..." if analysis and analysis.get("resumo_executivo") else "N/A"
        })

    # Sort by name
    rows.sort(key=lambda x: x["nome"])

    # Generate markdown report
    report = f"""# Comparativo: Bancos e Fintechs Brasileiras

**Data:** {datetime.now().strftime('%Y-%m-%d %H:%M')}
**Total de Análises:** {len(rows)}
**Total de Tokens:** {total_tokens:,}
**Custo Total:** ${total_cost:.4f}

---

## Tabela Comparativa

| Empresa | Categoria | Tipo Site | Tech | SEO | Tokens | Custo |
|---------|-----------|-----------|:----:|:---:|-------:|------:|
"""

    for r in rows:
        report += f"| **{r['nome']}** | {r['categoria']} | {r['tipo']} | {r['tech_level']}/10 | {r['seo_score']}/10 | {r['tokens']:,} | ${r['cost']:.4f} |\n"

    report += f"\n**TOTAL** | | | | | **{total_tokens:,}** | **${total_cost:.4f}** |\n"

    # Detailed summaries
    report += """

---

## Resumos Executivos

"""

    for r in rows:
        report += f"""### {r['nome']}
- **Domínio:** {r['domain']}
- **Categoria:** {r['categoria']}
- **Resumo:** {r['resumo']}

"""

    # Category breakdown
    report += """---

## Análise por Categoria

"""

    categories = {}
    for r in rows:
        cat = r['categoria']
        if cat not in categories:
            categories[cat] = []
        categories[cat].append(r['nome'])

    for cat, companies in categories.items():
        report += f"### {cat}\n"
        for c in companies:
            report += f"- {c}\n"
        report += "\n"

    # Save report
    report_path = os.path.join(OUTPUT_DIR, "COMPARATIVO_BANCOS_FINTECHS.md")
    with open(report_path, 'w', encoding='utf-8') as f:
        f.write(report)

    print(f"Report saved to: {report_path}")

    # Also save as JSON for the app
    json_report = {
        "generated_at": datetime.now().isoformat(),
        "total_analyses": len(rows),
        "total_tokens": total_tokens,
        "total_cost": total_cost,
        "analyses": rows
    }

    json_path = os.path.join(OUTPUT_DIR, "comparativo_bancos_fintechs.json")
    with open(json_path, 'w', encoding='utf-8') as f:
        json.dump(json_report, f, indent=2, ensure_ascii=False)

    print(f"JSON saved to: {json_path}")

    return report

if __name__ == "__main__":
    print(generate_report())
