from pipeline.customer_pipeline import CustomerPipeline

"""
EXECUÇÃO INTERATIVA VIA TERMINAL
> python -m pipeline
"""


def load_mock_data():
    """
    Você pode substituir isso por integração real com seu backend.
    Aqui fica só um exemplo de estrutura esperada.
    """
    mailing = {
            "NUM_TELEFONE": 99999999999,
            "DATA_VENCIMENTO": "VENC DIA 20",
            "NOME_CLIENTE_COMPLETO": "Maria de Fátima da silva",
            "NUM_CPF_CNPJ_CLIENTE": "00000000123",
            "NOME_MAE": "Mariana da silva",
            "VLR_TM_ORIGEM": 79.99,
            "PLANO_ORIGEM": " TIM CONTROLE SMART 8 0",
            "PLANO_DESTINO": "TIM_BLACK_A",
            "ACAO": "CTRL SMART NAO FIDEL_POS ATL A FIDEL",
            "BONUS_DESTINO": "15+30",
            "PARCEIRO": "ATN",
            "FLG_FID": 0,
            "USO_DE_DADOS": "AtÃ© 500MB",
            "DESCONTO_DESTINO": "90 FIDEL",
            "PRIORIZACAO": 1,
            "CUSTCODE": 1314082913.0,
            "TP_BASE": "ESTRUTURAL",
            "FLAG_DIRECIONAMENTO": "PADRAO",
            "FRESCOR": "M-2",
            "MEDIA_RECARGA_2": 67.99,
            "DAT_NASCIMENTO": "1968-09-08",
            "FAIXA_RECARGA": "61 |- 70",
            "FLG_LIVE_MKT": None,
            "BONUS_CONVERGENCIA": 0,
            "ORDEM": 4.0,
            "VALOR_PLANO_CORE": 92.99,
            "APP_STR": None,
            "OFERTA_LIVE": None,
            "IDADE": 56.0,
            "DADOS_PERIODO": "TARDE",
            "CLASSIFICACAO_RISCO": "BAIXO RISCO",
            "VLR_PLANO_DESTINO": 189.99,
            "FLG_ICMS": 0,
            "DESCONTO_ICMS": 0,
            "VLR_FINAL_PLANO_DEST": 99.99,
            "FX_IDADE": "51 A 60 ANOS",
            "PERSONA_IDADE": "ADULTO EXPERIENTE",
            "FX_GB": "02. ATÉ 1GB",
            "PERSONA_GB": "0-1 USO MINIMO",
            "PERSONA_USO": "TARDES CONECTADAS",
            "PERSONA_UF": "METROPOLE DINÂMICA",
            "PERSONA_SOCIAL_MEDIA": 0,
            "PESONA_STREAMER": 0,
            "PERSONA_MUSIC": 0,
            "DADOS_CORE": "5GB",
            "FX_PROPENSAO": 17.0,
            "ENDERECO": "N/A SQS 115 BL I 0 - CEP:  70385090, Cidade: BRASILIA/DF",
            "UF": "DF",
            "FLG_TRIPLE_A_OP": 0,
            "TIPO_MAILING": "CTRL-POS",
            "ANOMES": 202509,
            "CANAL": "OUTBOUND",
            "AGING_PLANO": 39.0,
            "DELTA_TICKET": 32.0
        }
    actual_plan = {
            "plano": "Tim Controle Smart oito ponto zero",
            "beneficios_001": None,
            "beneficios_002": None,
            "beneficios_todos": None,
            "apps_zero_rating": "WhatsApp, Messenger, Instagram, Facebook, X",
            "categoria_plano": "controle",
            "dependentes": None,
            "grupo_plano": "Tim Controle (Fatura)",
            "forma_pagamento": "Fatura",
            "dados_GB": "5",
            "comunicacao_whatsapp": None,
            "comunicacao_ligacoes_voz": "Ilimitadas",
            "comunicacao_sms": "Ilimitados",
            "inflight": None,
            "roaming_internacional": None,
            "servicos_valor_agregado": "Aya Books Premium, Aya Ensinah Premium, EXA Segurança",
            "aplicativos_inclusos": None
        }
    target_plan = {
            "plano": "Tim Black C Light",
            "beneficios_001": "não consumir seus gigas quando usar os aplicativos Instagram, Facebook e X e quando trocar mensagens no whatsapp.",
            "beneficios_002": "não consome seus gigas quando usar as principais redes sociais e tem acesso ao wifi nos aviões da gol e da latam e tem também o pacote chile de roaming internacional.",
            "beneficios_todos": "Utilização de ligações SMS, WhatsApp, Instagram, Facebook e X ilimitados, Além acesso ao wifi nos aviões da gol e latam juntamente com o pacote chile de roaming internacional. Além disso diversos serviços extras como Aya Audiobooks Premium, Bancah Premium + Jornais, EXA Segurança Premium, Aya Ensinah Premium, EXA Cloud, Busuu, Fluid Premium",
            "apps_zero_rating": "WhatsApp, Instagram, Facebook, X",
            "categoria_plano": "pós pago",
            "dependentes": "Não há dependentes",
            "grupo_plano": "Tim Black",
            "forma_pagamento": "Fatura",
            "dados_GB": "20",
            "comunicacao_whatsapp": "O uso de audio e video consome dos seus gigas, enquanto mensagens são ilimitadas",
            "comunicacao_ligacoes_voz": "Ilimitadas",
            "comunicacao_sms": "Ilimitados",
            "inflight": "Tim no Avião",
            "roaming_internacional": "Pacote Chile",
            "servicos_valor_agregado": "Aya Audiobooks Premium, Bancah Premium + Jornais, EXA Segurança Premium, Aya Ensinah Premium, EXA Cloud, Busuu, Fluid Premium",
            "aplicativos_inclusos": "Não há aplicativo incluso"
        }

    return mailing, actual_plan, target_plan


def main():
    print("\n==============================")
    print("   CUSTOMER PIPELINE (CLI)   ")
    print("==============================\n")

    # ----------------------------------------------
    # Carrega dados fake ou reais
    # ----------------------------------------------
    mailing, actual_plan, target_plan = load_mock_data()

    # ----------------------------------------------
    # Cria o pipeline
    # ----------------------------------------------
    pipeline = CustomerPipeline(
        mailing=mailing,
        actual_plan=actual_plan,
        target_plan=target_plan,
        streaming=True
    )

    # ----------------------------------------------
    # Prepara (elegibilidade vem do backend real)
    # ----------------------------------------------
    intro = pipeline.start()
    pipeline.prepare(elegibility=True, protocol = "PRT-2025-0000123456")
    # ----------------------------------------------
    # Inicia com mensagem fake do LLM
    # ----------------------------------------------
    print(f"[{intro['stage'].upper()}] AGENTE:", intro["response"])

    # ----------------------------------------------
    # LOOP PRINCIPAL (CLI)
    # ----------------------------------------------
    while True:
        user = input("\nVocê: ")

        if user.lower() in ["sair", "exit", "quit"]:
            print("\nEncerrando manualmente.")
            break

        result = pipeline.run(user)

        print(f"[{result['stage'].upper()}] AGENTE:", result["response"])
        print("TOOLS :", result["tools"])
        print("STATE :", result["state"])

        if result["stage"] == "end":
            print("\nPipeline concluído.\n")
            break


if __name__ == "__main__":
    main()
