#!/usr/bin/env python3
import sys
import os
import asyncio
import json
from datetime import datetime

sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'src'))

from infrastructure.elasticsearch.client import ElasticsearchClient

ES_URL = os.getenv("ES_URL", "http://localhost:9200")
ES_INDEX = os.getenv("ES_INDEX", "atuacapes")
ES_USER = os.getenv("ES_USER", "")
ES_PASSWORD = os.getenv("ES_PASSWORD", "")

IDS = [12932, 6273]


async def buscar_por_id(es_client, id_pessoa):
    response = await es_client.client.post(
        f"{es_client.url}/{es_client.index}/_search",
        json={
            "size": 1,
            "query": {"term": {"id": id_pessoa}},
            "_source": ["id", "dadosPessoais", "atuacoes"]
        }
    )
    response.raise_for_status()
    result = response.json()
    hits = result.get("hits", {}).get("hits", [])
    return hits[0]["_source"] if hits else None


async def main():
    print("Conectando ao Elasticsearch...")
    es_client = ElasticsearchClient(ES_URL, ES_INDEX, ES_USER, ES_PASSWORD)
    await es_client.connect()

    try:
        for id_pessoa in IDS:
            print(f"\n{'='*120}")
            print(f"ANÁLISE DETALHADA - ID: {id_pessoa}")
            print(f"{'='*120}")

            doc = await buscar_por_id(es_client, id_pessoa)
            if not doc:
                print(f"   Não encontrado")
                continue

            dados_pessoais = doc.get("dadosPessoais", {})
            nome = dados_pessoais.get("nome", "N/A")
            atuacoes = doc.get("atuacoes", [])

            print(f"\nNOME: {nome}")
            print(f"ID: {id_pessoa}")
            print(f"CPF: {dados_pessoais.get('cpf', 'N/A')}")
            print(f"\nTOTAL DE ATUAÇÕES: {len(atuacoes)}")

            por_tipo = {}
            for a in atuacoes:
                tipo = a.get("tipo", "Desconhecido")
                por_tipo[tipo] = por_tipo.get(tipo, 0) + 1

            print(f"\nDISTRIBUIÇÃO POR TIPO:")
            for tipo, count in sorted(por_tipo.items()):
                print(f"   {tipo}: {count}")

            print(f"\n{'='*120}")
            print("EVENTOS DETALHADOS")
            print(f"{'='*120}")

            eventos = [a for a in atuacoes if a.get("tipo") == "Evento"]
            print(f"\nTOTAL DE EVENTOS: {len(eventos)}")

            if eventos:
                por_descricao = {}
                for e in eventos:
                    desc = e.get("descricao", "Sem descrição")
                    por_descricao[desc] = por_descricao.get(desc, 0) + 1

                print(f"\nEVENTOS POR DESCRIÇÃO:")
                for desc, count in sorted(por_descricao.items(), key=lambda x: x[1], reverse=True):
                    print(f"   {desc}: {count}")

                print(f"\nPRIMEIROS 10 EVENTOS:")
                for idx, e in enumerate(eventos[:10], 1):
                    print(f"\n   Evento {idx}:")
                    print(f"      Descrição: {e.get('descricao', 'N/A')}")
                    print(f"      Início: {e.get('inicio', 'N/A')}")
                    print(f"      Fim: {e.get('fim', 'N/A')}")
                    print(f"      Nome: {e.get('nome', 'N/A')}")
                    if e.get("dadosEvento"):
                        print(f"      Dados Evento: {json.dumps(e['dadosEvento'], indent=8, ensure_ascii=False)[:200]}")

            print(f"\n{'='*120}")
            print("COORDENAÇÕES CAPES")
            print(f"{'='*120}")

            coordenacoes = [a for a in atuacoes if a.get("tipo") in [
                "Coordenação de Área de Avaliação",
                "Histórico de Coordenação de Área de Avaliação"
            ]]

            for idx, coord in enumerate(coordenacoes, 1):
                print(f"\nCoordenação {idx}:")
                print(f"   Tipo: {coord.get('tipo')}")
                print(f"   Nome: {coord.get('nome', 'N/A')}")
                print(f"   Descrição: {coord.get('descricao', 'N/A')}")
                print(f"   Início: {coord.get('inicio', 'N/A')}")
                print(f"   Fim: {coord.get('fim', 'N/A')}")

                dados = coord.get("dadosCoordenacaoArea") or coord.get("dadosHistoricoCoordenacaoArea")
                if dados:
                    print(f"   Dados detalhados:")
                    print(f"      Tipo função: {dados.get('tipo', 'N/A')}")
                    area = dados.get("areaAvaliacao", {})
                    if isinstance(area, dict):
                        print(f"      Área: {area.get('nome', 'N/A')} (ID: {area.get('id', 'N/A')})")
                    else:
                        print(f"      Área: {area}")
                    colegios = dados.get("colegio", [])
                    if colegios:
                        print(f"      Colégios: {[c.get('nome') for c in colegios if isinstance(c, dict)]}")

            print(f"\n{'='*120}")
            print("CONSULTORIAS")
            print(f"{'='*120}")

            consultorias = [a for a in atuacoes if a.get("tipo") in ["Consultor", "Histórico de Consultoria"]]
            for idx, cons in enumerate(consultorias, 1):
                print(f"\nConsultoria {idx}:")
                print(f"   Tipo: {cons.get('tipo')}")
                print(f"   Início: {cons.get('inicio', 'N/A')}")
                print(f"   Fim: {cons.get('fim', 'N/A')}")
                dados = cons.get("dadosConsultoria", {})
                if dados:
                    print(f"   Situação: {dados.get('situacaoConsultoria', 'N/A')}")
                    print(f"   Início situação: {dados.get('inicioSituacao', 'N/A')}")
                    print(f"   Inativação: {dados.get('inativacaoSituacao', 'N/A')}")

            print(f"\n{'='*120}")
            print("PREMIAÇÕES")
            print(f"{'='*120}")

            premiacoes = [a for a in atuacoes if "Prêmio" in a.get("tipo", "")]
            print(f"\nTOTAL DE PREMIAÇÕES: {len(premiacoes)}")

            por_tipo_prem = {}
            for p in premiacoes:
                tipo = p.get("tipo", "Desconhecido")
                por_tipo_prem[tipo] = por_tipo_prem.get(tipo, 0) + 1

            print(f"\nPREMIAÇÕES POR TIPO:")
            for tipo, count in sorted(por_tipo_prem.items()):
                print(f"   {tipo}: {count}")

            for tipo_prem in ["Premiação Prêmio", "Avaliação Prêmio", "Inscrição Prêmio"]:
                prems = [p for p in premiacoes if p.get("tipo") == tipo_prem]
                if prems:
                    print(f"\n{tipo_prem} ({len(prems)}):")
                    for idx, p in enumerate(prems[:5], 1):
                        print(f"   {idx}. {p.get('descricao', 'N/A')} ({p.get('inicio', 'N/A')})")

    finally:
        await es_client.close()


if __name__ == "__main__":
    asyncio.run(main())
