# -*- coding: utf-8 -*-
# /var/www/html/fluxo_classificacao.py

import json
import importlib
from utils_hibrido import registrar_log, enviar_whatsapp, consultar_deepseek, obter_mensagem_db

def classificar_local(mensagem):
    msg = mensagem.lower()
    if any(p in msg for p in ['boleto', 'fatura', 'pagar', 'cobrança', 'pix', 'código de barras', 'codigo de barras']):
        return 'FINANCEIRO'
    if any(p in msg for p in ['lento', 'caiu', 'queda', 'sem internet', 'suporte', 'tecnico']):
        return 'SUPORTE'
    if any(p in msg for p in ['contratar', 'plano', 'assinar', 'vendas']):
        return 'VENDAS'
    if any(p in msg for p in ['encerrar', 'sair', 'tchau']):
        return 'ENCERRAR'
    return None

def processar(conn, cursor, job, atendimento, configs, mensagem_bruta):
    atendimento_id = atendimento['id']
    numero = atendimento['cliente_numero']
    estado = atendimento.get('estado_atual', 'AGUARDANDO_MENSAGEM')
    
    raw_ctx = atendimento.get('contexto_json')
    ctx = json.loads(raw_ctx) if raw_ctx else {}
    
    if estado == 'AGUARDANDO_MENSAGEM':
        # Tenta classificar localmente
        intencao = classificar_local(mensagem_bruta)
        
        # Se não conseguiu, chama IA apenas para classificar
        if not intencao:
            prompt_sistema = obter_mensagem_db(cursor, 'prompt_classificacao_interna')
            if prompt_sistema:
                resposta_ia = consultar_deepseek(configs, mensagem_bruta, prompt_sistema)
                # Verifica se resposta_ia é dict e tem a chave 'decisao'
                if resposta_ia and isinstance(resposta_ia, dict):
                    intencao = resposta_ia.get('decisao')
                elif resposta_ia and isinstance(resposta_ia, str):
                    intencao = resposta_ia
                else:
                    intencao = None
        
        # Fallback
        if not intencao:
            intencao = 'GERAL'
        
        # Mapeia para fluxo (normalizando maiúsculas)
        intencao = intencao.upper() if isinstance(intencao, str) else 'GERAL'
        
        registrar_log('CLASSIFICACAO', f"Intenção: {intencao}")
        
        fluxo_map = {
            'FINANCEIRO': 'financeiro',
            'SUPORTE_TECNICO': 'suporte',
            'SUPORTE': 'suporte',
            'VENDAS': 'vendas',
            'GERAL': 'geral',
            'ENCERRAR': 'encerrar',
            'FUGA_RETORNO': 'identificacao'
        }
        
        fluxo_destino = fluxo_map.get(intencao, 'geral')
        
        if fluxo_destino == 'encerrar':
            enviar_whatsapp(configs, numero, "Atendimento encerrado. Até logo!")
            cursor.execute("UPDATE atendimentos SET status = 'encerrado' WHERE id = %s", (atendimento_id,))
            conn.commit()
            return
        
        # Atualiza e redireciona
        cursor.execute("""
            UPDATE atendimentos
            SET fluxo_atual = %s, estado_atual = 'INICIO'
            WHERE id = %s
        """, (fluxo_destino.upper(), atendimento_id))
        conn.commit()
        
        try:
            modulo = importlib.import_module(f"fluxo_{fluxo_destino}")
            novo_atend = dict(atendimento)
            novo_atend['fluxo_atual'] = fluxo_destino.upper()
            novo_atend['estado_atual'] = 'INICIO'
            modulo.processar(conn, cursor, job, novo_atend, configs, mensagem_bruta)
        except ImportError:
            registrar_log('CLASSIFICACAO', f"Módulo fluxo_{fluxo_destino} não encontrado")
            enviar_whatsapp(configs, numero, "Transferindo para um atendente.")
            cursor.execute("""
                UPDATE atendimentos
                SET status = 'fila', setor_id = 1, fluxo_atual = 'HUMANO', estado_atual = 'AGUARDANDO'
                WHERE id = %s
            """, (atendimento_id,))
            conn.commit()
