#!/usr/bin/env python3
"""
Demo simplificado: coleta de prospects LELYON sem dependências externas.
Gera JSON + CSV funcionais para o dashboard.
"""

import json
import csv
import random
from datetime import datetime
from pathlib import Path

CITIES = {
    "sao-paulo": "São Paulo",
    "sao-bernardo-do-campo": "São Bernardo do Campo",
    "santo-andre": "Santo André",
    "sao-caetano-do-sul": "São Caetano do Sul",
    "diadema": "Diadema",
    "maua": "Mauá",
    "ribeirao-pires": "Ribeirão Pires",
    "rio-grande-da-serra": "Rio Grande da Serra",
}

SERVICE_CNAE_MAP = {
    "PWA/App Development": ["6201501", "6202300", "6203100"],
    "Agente IA/Automação": ["6204000", "6209100", "6311900"],
    "Loja WordPress/WooCommerce": ["4789099", "4791302", "4791303"],
    "CRM & Estoque QR-Code": ["6201501", "6204000", "8211300", "7020400"],
    "Segurança + SEO": ["6209100", "6311900"],
    "Marketing Digital/Ads": ["7311400", "7319002", "7319003", "7319004", "7319099", "7320300"],
}

TARGET_CNAES = {
    "6201501": "Desenvolvimento de programas de computador sob encomenda",
    "6202300": "Desenvolvimento e licenciamento de programas de computador customizáveis",
    "6203100": "Desenvolvimento e licenciamento de programas de computador não-customizáveis",
    "6204000": "Consultoria em tecnologia da informação",
    "6209100": "Suporte técnico, manutenção e outros serviços em tecnologia da informação",
    "6311900": "Tratamento de dados, provedores de serviços de aplicação e serviços de hospedagem na internet",
    "4789099": "Comércio varejista de outros produtos não especificados anteriormente",
    "4791302": "Comércio varejista de mercadorias em geral, com predominância de produtos alimentícios - comércio eletrônico",
    "4791303": "Comércio varejista de mercadorias em geral, com predominância de produtos alimentícios - outros",
    "8211300": "Serviços combinados de escritório e apoio administrativo",
    "8299799": "Outras atividades de serviços prestados principalmente às empresas não especificadas anteriormente",
    "7020400": "Atividades de consultoria em gestão empresarial, exceto consultoria técnica específica",
    "7311400": "Agências de publicidade",
    "7319002": "Promoção de vendas",
    "7319003": "Marketing direto",
    "7319004": "Consultoria em publicidade",
    "7319099": "Outras atividades de publicidade não especificadas anteriormente",
    "7320300": "Pesquisas de mercado e de opinião pública",
}

B2C_CNAES = {
    "4711302": "Supermercados",
    "4712100": "Minimercados, mercearias e armazéns",
    "4721102": "Padaria e confeitaria com predominância de revenda",
    "4722100": "Frutas, verduras e legumes",
    "4723700": "Bebidas",
    "4730201": "Combustíveis para veículos automotores",
    "4741300": "Materiais de construção",
    "4742201": "Tintas e materiais para pintura",
    "4744001": "Ferragens e ferramentas",
    "4744002": "Madeira e artefatos",
    "4751201": "Equipamentos de informática",
    "4752100": "Equipamentos de telefonia e comunicação",
    "4753100": "Eletrodomésticos e equipamentos de áudio e vídeo",
    "4754701": "Móveis",
    "4755501": "Tecidos",
    "4761001": "Livros",
    "4762100": "Jornais e revistas",
    "4763800": "Papelaria",
    "4771701": "Produtos farmacêuticos sem manipulação",
    "4772500": "Cosméticos, perfumaria e higiene pessoal",
    "4781400": "Artigos do vestuário e acessórios",
    "4782201": "Calçados",
    "4783100": "Artigos de viagem",
    "4784900": "Gás liquefeito de petróleo (GLP)",
    "4789099": "Outros produtos não especificados anteriormente",
    "4791302": "Comércio varejista de mercadorias em geral - comércio eletrônico",
    "5611201": "Restaurantes e similares",
    "5611203": "Lanchonetes, casas de chá, de sucos e similares",
    "5612100": "Serviços ambulantes de alimentação",
    "5620101": "Fornecimento de alimentos preparados para empresas",
    "9602501": "Cabeleireiros, manicure e pedicure",
    "9602502": "Atividades de estética e outros serviços de cuidados com a beleza",
    "9609202": "Agências matrimoniais",
    "9609299": "Outras atividades de serviços pessoais não especificadas anteriormente",
    "9521500": "Reparação de equipamentos eletroeletrônicos de uso pessoal",
    "9529102": "Chaveiros",
    "4520001": "Manutenção e reparação mecânica de veículos automotores",
    "4530703": "Comércio a varejo de peças e acessórios novos para veículos",
    "4541201": "Comércio por atacado de motocicletas e motonetas",
    "8512100": "Educação infantil - pré-escola",
    "8592901": "Ensino de dança",
    "8599604": "Treinamento em desenvolvimento profissional e gerencial",
    "9312300": "Clubes sociais, esportivos e similares",
    "9321500": "Atividades de academias de ginástica",
    "9430800": "Associações de defesa de direitos sociais",
    "9491000": "Organizações religiosas ou filosóficas",
    "9499500": "Atividades associativas não especificadas anteriormente",
    "8630503": "Atividade médica ambulatorial restrita a consultas",
    "8640299": "Serviços de complementação diagnóstica e terapêutica",
    "8690999": "Outras atividades de atenção à saúde humana",
    "8711502": "Instituições de longa permanência para idosos",
    "8800601": "Serviços de assistência social sem alojamento",
}

B2C_CATEGORY_MAP = {
    "Alimentação & Bebidas": ["4711302", "4712100", "4721102", "4722100", "4723700", "5611201", "5611203", "5612100", "5620101"],
    "Varejo & Comércio": ["4730201", "4741300", "4742201", "4744001", "4744002", "4751201", "4752100", "4753100", "4754701", "4755501", "4761001", "4762100", "4763800", "4771701", "4772500", "4781400", "4782201", "4783100", "4784900", "4789099", "4791302"],
    "Beleza & Estética": ["9602501", "9602502"],
    "Serviços Automotivos": ["4520001", "4530703", "4541201"],
    "Saúde & Bem-estar": ["8630503", "8640299", "8690999", "8711502", "8800601"],
    "Educação & Treinamento": ["8512100", "8592901", "8599604"],
    "Lazer & Esportes": ["9312300", "9321500"],
    "Serviços Pessoais & Outros": ["9609202", "9609299", "9521500", "9529102", "9430800", "9491000", "9499500"],
}

BAIRROS_POR_CIDADE = {
    "São Paulo": ["Bela Vista", "Centro", "Pinheiros", "Bras", "Vila Mariana", "Jardim Paulista", "Itaim Bibi", "Moema", "Santana", "Tatuapé"],
    "São Bernardo do Campo": ["Centro", "Rudge Ramos", "Montanhão", "Baeta Neves", "Jardim do Mar", "Paulicéia", "Alvarenga"],
    "Santo André": ["Centro", "Campestre", "Jardim", "Bangú", "Utinga", "Vila Luzita", "Parque das Nações"],
    "São Caetano do Sul": ["Santa Paula", "Centro", "Cerâmica", "Barcelona", "Olímpico", "Fundação", "Mauá"],
    "Diadema": ["Centro", "Piraporinha", "Eldorado", "Taboão", "Vila Conceição", "Jardim Canhema", "Serraria"],
    "Mauá": ["Centro", "Vila Noêmia", "Parque das Américas", "Jardim Zaíra", "Capuava", "Guapituba", "Zaíra"],
    "Ribeirão Pires": ["Centro", "Jardim Pastoril", "Vila Suíça", "Ouro Fino", "Santa Luzia", "Vila do Doce", "Parque Aliança"],
    "Rio Grande da Serra": ["Centro", "Vila Conde", "Nova Rio Grande", "Jardim das Flores", "Vila Mineira", "Parque América", "Vila São Pedro"],
}

SEGMENT_NAMES = {
    "6201501": ["Dev", "Tech", "Software", "Code", "Digital", "Systems", "Labs", "Solutions"],
    "6204000": ["Consult", "TI", "Tech", "Advisory", "Strategy", "Digital", "Innovation"],
    "6209100": ["Suporte", "Tech", "IT", "Service", "Support", "Systems", "Care"],
    "4789099": ["Shop", "Store", "E-commerce", "Market", "Commerce", "Retail", "Sales"],
    "7311400": ["Ads", "Marketing", "Creative", "Agency", "Media", "Brand", "Digital"],
    "7020400": ["Gestão", "Consult", "Business", "Strategy", "Management", "Advisory"],
    "8211300": ["Admin", "Office", "Support", "Backoffice", "Services", "Business"],
}

CATEGORY_PREFIXES = {
    "Alimentação & Bebidas": ["Sabor", "Delícia", "Chef", "Gourmet", "Cantina", "Bistro", "Padaria", "Doceria", "Lanchonete", "Restaurante"],
    "Varejo & Comércio": ["Loja", "Shop", "Store", "Mercado", "Bazar", "Magazine", "Casa", "Mundo", "Centro", "Depósito"],
    "Beleza & Estética": ["Beleza", "Estética", "Studio", "Salão", "Spa", "Clínica", "Care", "Glamour", "Charme", "Visual"],
    "Serviços Automotivos": ["Auto", "Car", "Mecânica", "Pneus", "Centro", "Oficina", "Service", "Motor", "Roda", "Freio"],
    "Saúde & Bem-estar": ["Saúde", "Clínica", "Vida", "Bem-estar", "Cuidar", "Med", "Health", "Vital", "Equilíbrio", "Harmonia"],
    "Educação & Treinamento": ["Escola", "Curso", "Aprenda", "Sabere", "Instituto", "Academia", "Centro", "Formação", "Desenvolve", "Capacita"],
    "Lazer & Esportes": ["Fit", "Sport", "Clube", "Academia", "Esporte", "Vida", "Movimento", "Ativo", "Energia", "Performance"],
    "Serviços Pessoais & Outros": ["Serviço", "Help", "Assist", "Care", "Support", "Solutions", "Facilita", "Resolve", "Prático", "Rápido"],
}

def gen_cnpj():
    base = random.randint(10000000, 99999999)
    filial = random.randint(1, 9999)
    dv = random.randint(10, 99)
    return f"{base:08d}/{filial:04d}-{dv}"

def gen_b2b(count=500):
    cnae_list = list(TARGET_CNAES.items())
    bairros = BAIRROS_POR_CIDADE
    companies = []
    for _ in range(count):
        city = random.choice(list(CITIES.values()))
        bairro = random.choice(bairros.get(city, ["Centro"]))
        cnae_code, cnae_desc = random.choice(cnae_list)
        situacao = random.choices(["Ativa", "Baixada", "Inapta", "Suspensa"], weights=[0.42, 0.35, 0.15, 0.08])[0]
        porte = random.choices(["MEI", "ME", "EPP", "Grande"], weights=[0.30, 0.45, 0.18, 0.07])[0]
        capital_ranges = {"MEI": (0, 5000), "ME": (5000, 360000), "EPP": (360000, 4800000), "Grande": (4800000, 500000000)}
        min_cap, max_cap = capital_ranges.get(porte, (0, 50000))
        capital = random.randint(min_cap, max_cap)
        prefixes = SEGMENT_NAMES.get(cnae_code, ["Empresa", "Negócio", "Comércio", "Serviços"])
        prefix = random.choice(prefixes)
        suffix = random.choice(["Brasil", "SP", "ABC", "Digital", "Tech", "Solutions", "Group", "Ltda", ""])
        companies.append({
            "cnpj": gen_cnpj(),
            "razao_social": f"{prefix} {suffix} Ltda".strip(),
            "nome_fantasia": f"{prefix} {suffix}".strip() if suffix else prefix,
            "cidade": city, "bairro": bairro, "cnae": cnae_code, "cnae_desc": cnae_desc,
            "situacao": situacao, "capital_social": capital, "porte": porte,
            "data_abertura": f"{random.randint(2010,2026)}-{random.randint(1,12):02d}-{random.randint(1,28):02d}",
            "tipo_prospeccao": "B2B",
        })
    return companies

def gen_b2c(count=400):
    bairros = BAIRROS_POR_CIDADE
    b2c_cnae_list = list(B2C_CNAES.items())
    companies = []
    for _ in range(count):
        city = random.choice(list(CITIES.values()))
        bairro = random.choice(bairros.get(city, ["Centro"]))
        cnae_code, cnae_desc = random.choice(b2c_cnae_list)
        situacao = random.choices(["Ativa", "Baixada", "Inapta", "Suspensa"], weights=[0.45, 0.30, 0.15, 0.10])[0]
        porte = random.choices(["MEI", "ME", "EPP", "Grande"], weights=[0.50, 0.35, 0.12, 0.03])[0]
        capital_ranges = {"MEI": (0, 5000), "ME": (5000, 360000), "EPP": (360000, 4800000), "Grande": (4800000, 100000000)}
        min_cap, max_cap = capital_ranges.get(porte, (0, 50000))
        capital = random.randint(min_cap, max_cap)
        category = "Serviços Pessoais & Outros"
        for cat, cnaes in B2C_CATEGORY_MAP.items():
            if cnae_code in cnaes:
                category = cat
                break
        prefixes = CATEGORY_PREFIXES.get(category, ["Empresa", "Negócio", "Comércio", "Serviços"])
        prefix = random.choice(prefixes)
        suffix = random.choice(["", "SP", "ABC", "Brasil", "Centro", "Norte", "Sul", "Leste", "Oeste", "Paulista"])
        companies.append({
            "cnpj": gen_cnpj(),
            "razao_social": f"{prefix} {suffix} Ltda".strip() if suffix else f"{prefix} Ltda",
            "nome_fantasia": f"{prefix} {suffix}".strip() if suffix else prefix,
            "cidade": city, "bairro": bairro, "cnae": cnae_code, "cnae_desc": cnae_desc,
            "situacao": situacao, "capital_social": capital, "porte": porte,
            "data_abertura": f"{random.randint(2010,2026)}-{random.randint(1,12):02d}-{random.randint(1,28):02d}",
            "tipo_prospeccao": "B2C", "b2c_categoria": category,
        })
    return companies

def enrich_fit(companies):
    for c in companies:
        cnae = c.get("cnae", "")
        fit = {}
        if c.get("tipo_prospeccao") == "B2B":
            for svc, cnaes in SERVICE_CNAE_MAP.items():
                if cnae in cnaes:
                    fit[svc] = 100
                elif any(cnae.startswith(cc[:4]) for cc in cnaes):
                    fit[svc] = 50
        c["lelyon_fit"] = fit
        c["best_fit_service"] = max(fit, key=fit.get) if fit else "N/A"
        c["fit_score"] = max(fit.values()) if fit else 0
        for f in ["email","telefone","whatsapp","website","website_status","contato_nome","contato_cargo","linkedin","instagram","facebook","fonte_enriquecimento","data_enriquecimento","observacoes"]:
            c.setdefault(f, "")
    return companies

def save_all(b2b, b2c, out_dir):
    out_dir.mkdir(parents=True, exist_ok=True)
    ts = datetime.now().strftime("%Y%m%d_%H%M%S")
    all_c = b2b + b2c
    
    # JSON completo
    with open(out_dir / f"lelyon_prospects_{ts}.json", "w", encoding="utf-8") as f:
        json.dump({"b2b": b2b, "b2c": b2c, "metadata": {
            "generated_at": datetime.now().isoformat(), "total_b2b": len(b2b), "total_b2c": len(b2c),
            "cities": list(CITIES.values()), "b2b_services": list(SERVICE_CNAE_MAP.keys()),
            "b2c_categories": list(B2C_CATEGORY_MAP.keys()),
        }}, f, ensure_ascii=False, indent=2)
    
    # CSV
    fields = ["cnpj","razao_social","nome_fantasia","cidade","bairro","cnae","cnae_desc","situacao","porte","capital_social",
              "data_abertura","tipo_prospeccao","b2c_categoria","best_fit_service","fit_score","lelyon_fit",
              "email","telefone","whatsapp","website","website_status","contato_nome","contato_cargo",
              "linkedin","instagram","facebook","fonte_enriquecimento","data_enriquecimento","observacoes"]
    with open(out_dir / f"lelyon_prospects_{ts}.csv", "w", encoding="utf-8-sig", newline="") as f:
        w = csv.DictWriter(f, fieldnames=fields)
        w.writeheader()
        for c in all_c:
            row = {k: c.get(k, "") for k in fields}
            row["lelyon_fit"] = json.dumps(c.get("lelyon_fit", {}), ensure_ascii=False)
            w.writerow(row)
    
    # Symlinks
    for src, dst in [(f"lelyon_prospects_{ts}.json", "lelyon_prospects_latest.json")]:
        p = out_dir / dst
        if p.exists(): p.unlink()
        p.symlink_to(src)
    
    print(f"✅ Gerado: {len(all_c)} empresas ({len(b2b)} B2B + {len(b2c)} B2C)")
    print(f"📁 {out_dir}/lelyon_prospects_{ts}.json + .csv")
    return {"json": str(out_dir / f"lelyon_prospects_{ts}.json"), "csv": str(out_dir / f"lelyon_prospects_{ts}.csv")}

def main():
    print("="*60)
    print("LELYON - Demo Coleta Prospects B2B + B2C (sem pandas)")
    print("Região: São Paulo + Grande ABC (8 cidades)")
    print("="*60)
    out = Path("/root/lelyon_prospecting/data")
    print("\n📥 Gerando B2B..."); b2b = gen_b2b(500)
    print("📥 Gerando B2C..."); b2c = gen_b2c(400)
    print("🎯 Calculando fit LELYON..."); all_c = enrich_fit(b2b + b2c)
    b2b = [c for c in all_c if c["tipo_prospeccao"]=="B2B"]
    b2c = [c for c in all_c if c["tipo_prospeccao"]=="B2C"]
    print(f"\n📊 Total: {len(all_c)} | B2B: {len(b2b)} | B2C: {len(b2c)}")
    print("   B2B por serviço:")
    for svc in SERVICE_CNAE_MAP:
        n = len([c for c in b2b if c["best_fit_service"]==svc])
        print(f"     {svc}: {n}")
    print("   B2C por categoria:")
    for cat in B2C_CATEGORY_MAP:
        n = len([c for c in b2c if c["b2c_categoria"]==cat])
        print(f"     {cat}: {n}")
    print("\n💾 Salvando...")
    save_all(b2b, b2c, out)
    print("\n✅ Pronto! Dashboard em /root/lelyon_prospecting/dashboard.html")
    print("   Para ver: cd /root/lelyon_prospecting/data && python3 -m http.server 8080")
    print("   Tunnel SSH: ssh -L 8081:localhost:8080 alex@173.212.202.72")

if __name__ == "__main__":
    main()