<?php
include 'verifica_login.php';
include 'conexao.php';
include 'config/classificacao_lead_modelo_utils.php';
$conn = conectar_banco();
garantir_modelo_classificacao_lead_padrao($conn);

function calcular_nota_resposta($resposta, $tipo_resposta, $opcoes_json = '') {
    $resposta = (string)$resposta;
    $tipo_resposta = (string)$tipo_resposta;
    $nota = 0.0;

    if ($tipo_resposta === 'campos_personalizados') {
        $resposta_campos = json_decode($resposta, true);
        $campos_def = json_decode($opcoes_json ?: '[]', true);

        if (is_array($resposta_campos) && is_array($campos_def)) {
            foreach ($campos_def as $campo_def) {
                $nome_campo = $campo_def['nome'] ?? '';
                $nota_campo = (float)($campo_def['nota'] ?? 0);

                if ($nome_campo === '') {
                    continue;
                }

                $valor_campo = $resposta_campos[$nome_campo] ?? '';
                if (is_array($valor_campo)) {
                    $tem_valor = count(array_filter($valor_campo, function($v) {
                        return trim((string)$v) !== '';
                    })) > 0;
                } else {
                    $tem_valor = trim((string)$valor_campo) !== '';
                }

                if ($tem_valor) {
                    $nota += $nota_campo;
                }
            }
        }

        return $nota;
    }

    if (strpos($resposta, '|') === false) {
        return 0.0;
    }

    $partes = explode('|', $resposta);

    // Formato salvo para respostas pontuadas:
    // radio/select: Texto|Nota
    // checkbox: Texto1|Nota1|Texto2|Nota2|...
    // Somar posições ímpares (notas), para considerar múltiplas seleções.
    for ($i = 1; $i < count($partes); $i += 2) {
        $valor = trim((string)$partes[$i]);
        if ($valor !== '' && is_numeric($valor)) {
            $nota += (float)$valor;
        }
    }

    return $nota;
}

$id_pesquisa_empresa = (int)($_POST['id_pesquisa_empresa'] ?? 0);

if ($id_pesquisa_empresa <= 0) {
    die('Erro: Pesquisa não encontrada');
}

// Coletar dados da entrevista
$quem_entrevistou = $_POST['quem_entrevistou'] ?? '';
$data_entrevista = $_POST['data_entrevista'] ?? null;
$hora_entrevista = $_POST['hora_entrevista'] ?? null;
$id_status_questionario_fk = (int)($_POST['id_status_questionario_fk'] ?? 0);
$agendamento_data_retorno = $_POST['agendamento_data_retorno'] ?? null;
$agendamento_hora_retorno = $_POST['agendamento_hora_retorno'] ?? null;
$agendar_reuniao = $_POST['agendar_reuniao'] ?? null;
$data_reuniao = $_POST['data_reuniao'] ?? null;
$horario_reuniao = $_POST['horario_reuniao'] ?? null;
$observacoes_gerais = $_POST['observacoes_gerais'] ?? '';
$observacoes_internas = $_POST['observacoes_internas'] ?? '';
$mensagem_fechamento = $_POST['mensagem_fechamento'] ?? '';
$total_respostas_processadas = 0;

// Regra de negócio: ao salvar, preencher automaticamente os dados da entrevista
$usuario_logado_nome = trim((string)($_SESSION['usuario_nome'] ?? ''));
$usuario_logado_login = trim((string)($_SESSION['usuario_login'] ?? ''));
$quem_entrevistou = $usuario_logado_nome !== '' ? $usuario_logado_nome : $usuario_logado_login;

$agora = new DateTime('now', new DateTimeZone('America/Sao_Paulo'));
$data_entrevista = $agora->format('Y-m-d');
$hora_entrevista = $agora->format('H:i');

// Atualizar dados da entrevista na tabela pesquisa_empresa
$stmt_update = $conn->prepare("
    UPDATE pesquisa_empresa 
    SET quem_entrevistou = ?,
        data_entrevista = ?,
        hora_entrevista = ?,
        id_status_questionario_fk = ?,
        agendamento_data_retorno = ?,
        agendamento_hora_retorno = ?,
        agendar_reuniao = ?,
        data_reuniao = ?,
        horario_reuniao = ?,
        observacoes_gerais = ?,
        observacoes_internas = ?,
        mensagem_fechamento = ?
    WHERE id = ?
");

if (!$stmt_update) {
    die('Erro na preparação: ' . $conn->error);
}

// 13 placeholders: s s s i s s s s s s s s i
$stmt_update->bind_param(
    'sssissssssssi',
    $quem_entrevistou,           // 1: s
    $data_entrevista,             // 2: s
    $hora_entrevista,             // 3: s
    $id_status_questionario_fk,   // 4: i
    $agendamento_data_retorno,    // 5: s
    $agendamento_hora_retorno,    // 6: s
    $agendar_reuniao,             // 7: s
    $data_reuniao,                // 8: s
    $horario_reuniao,             // 9: s
    $observacoes_gerais,          // 10: s
    $observacoes_internas,        // 11: s
    $mensagem_fechamento,         // 12: s
    $id_pesquisa_empresa          // 13: i
);

if (!$stmt_update->execute()) {
    die('Erro ao atualizar pesquisa: ' . $stmt_update->error);
}

$stmt_update->close();

// Salvar respostas das perguntas
foreach ($_POST as $key => $value) {
    if (strpos($key, 'resposta_') === 0) {
        $id_pergunta = (int)str_replace('resposta_', '', $key);
        if (is_array($value)) {
            // Verificar se é campos_personalizados (chaves string) ou checkbox (chaves numéricas)
            $is_assoc = count(array_filter(array_keys($value), 'is_string')) > 0;
            $resposta = $is_assoc ? json_encode($value, JSON_UNESCAPED_UNICODE) : implode('|', $value);
        } else {
            $resposta = $value;
        }
        
        // Verificar se já existe resposta
        $stmt_check = $conn->prepare("SELECT id FROM pesquisa_respostas WHERE id_pesquisa_empresa_fk = ? AND id_pergunta_fk = ?");
        if ($stmt_check) {
            $stmt_check->bind_param('ii', $id_pesquisa_empresa, $id_pergunta);
            $stmt_check->execute();
            $existe = $stmt_check->get_result()->fetch_assoc();
            $stmt_check->close();
            
            if ($existe) {
                // Atualizar
                $stmt_resp = $conn->prepare("UPDATE pesquisa_respostas SET resposta = ? WHERE id_pesquisa_empresa_fk = ? AND id_pergunta_fk = ?");
                $stmt_resp->bind_param('sii', $resposta, $id_pesquisa_empresa, $id_pergunta);
            } else {
                // Inserir
                $stmt_resp = $conn->prepare("INSERT INTO pesquisa_respostas (id_pesquisa_empresa_fk, id_pergunta_fk, resposta) VALUES (?, ?, ?)");
                $stmt_resp->bind_param('iis', $id_pesquisa_empresa, $id_pergunta, $resposta);
            }
            
            if ($stmt_resp) {
                $stmt_resp->execute();
                $total_respostas_processadas++;
                $stmt_resp->close();
            }
        }
    }
}

// Calcular nota total a partir das respostas salvas
$stmt_calc = $conn->prepare("SELECT pr.resposta, q.tipo_resposta, q.opcoes FROM pesquisa_respostas pr INNER JOIN questionario_template_perguntas q ON q.id = pr.id_pergunta_fk WHERE pr.id_pesquisa_empresa_fk = ?");
$stmt_calc->bind_param('i', $id_pesquisa_empresa);
$stmt_calc->execute();
$result_calc = $stmt_calc->get_result();

$nota_total_calc = 0;
while ($row_calc = $result_calc->fetch_assoc()) {
    $resp = $row_calc['resposta'] ?? '';
    $tipo_resposta_calc = $row_calc['tipo_resposta'] ?? '';
    $nota_total_calc += calcular_nota_resposta($resp, $tipo_resposta_calc, $row_calc['opcoes'] ?? '');
}
$stmt_calc->close();

// Buscar classificação baseada na nota
$classificacao_calc = '-';
$id_modelo_classificacao = 0;

$stmt_modelo = $conn->prepare("SELECT p.id_modelo_classificacao_lead_fk
    FROM pesquisa_empresa pe
    INNER JOIN pesquisas p ON p.id = pe.id_pesquisa_fk
    WHERE pe.id = ?
    LIMIT 1");
if ($stmt_modelo) {
    $stmt_modelo->bind_param('i', $id_pesquisa_empresa);
    $stmt_modelo->execute();
    $row_modelo = $stmt_modelo->get_result()->fetch_assoc();
    $id_modelo_classificacao = (int)($row_modelo['id_modelo_classificacao_lead_fk'] ?? 0);
    $stmt_modelo->close();
}

if ($id_modelo_classificacao <= 0) {
    $id_modelo_classificacao = garantir_modelo_classificacao_lead_padrao($conn);
}

$stmt_classif = $conn->prepare("
    SELECT classificacao 
    FROM classificacao_leads_modelos_itens 
    WHERE id_modelo_fk = ?
      AND ativo = 'S'
      AND ? >= faixa_minima AND ? <= faixa_maxima 
    ORDER BY ordem 
    LIMIT 1
");
$stmt_classif->bind_param('idd', $id_modelo_classificacao, $nota_total_calc, $nota_total_calc);
$stmt_classif->execute();
$result_classif = $stmt_classif->get_result()->fetch_assoc();
if ($result_classif) {
    $classificacao_calc = $result_classif['classificacao'];
}
$stmt_classif->close();

// Atualizar nota_total e classificacao na pesquisa_empresa
$stmt_nota = $conn->prepare("UPDATE pesquisa_empresa SET nota_total = ?, classificacao = ? WHERE id = ?");
$stmt_nota->bind_param('dsi', $nota_total_calc, $classificacao_calc, $id_pesquisa_empresa);
$stmt_nota->execute();
$stmt_nota->close();

$nome_pesquisa_log = '-';
$nome_questionario_log = '-';
$empresa_log = '-';
$status_nome_log = '-';

$stmt_log_contexto = $conn->prepare("
    SELECT
        p.nome AS nome_pesquisa,
        qt.nome AS nome_questionario,
        COALESCE(e.NOME_FANTASIA, e.EMPRESA, '-') AS nome_empresa,
        COALESCE(s.nome_status, '-') AS nome_status
    FROM pesquisa_empresa pe
    INNER JOIN pesquisas p ON p.id = pe.id_pesquisa_fk
    LEFT JOIN questionario_template qt ON qt.id = p.id_questionario_template_fk
    LEFT JOIN empresas e ON e.ID_EMPRESA = pe.id_empresa_fk
    LEFT JOIN statusdoquestionario s ON s.id_status = pe.id_status_questionario_fk
    WHERE pe.id = ?
    LIMIT 1
");
if ($stmt_log_contexto) {
    $stmt_log_contexto->bind_param('i', $id_pesquisa_empresa);
    $stmt_log_contexto->execute();
    $row_log_contexto = $stmt_log_contexto->get_result()->fetch_assoc();
    if ($row_log_contexto) {
        $nome_pesquisa_log = (string)($row_log_contexto['nome_pesquisa'] ?? '-');
        $nome_questionario_log = (string)($row_log_contexto['nome_questionario'] ?? '-');
        $empresa_log = (string)($row_log_contexto['nome_empresa'] ?? '-');
        $status_nome_log = (string)($row_log_contexto['nome_status'] ?? '-');
    }
    $stmt_log_contexto->close();
}

registrar_log_interacao(
    $conn,
    'QUESTIONARIO_SALVO',
    'Respostas salvas na pesquisa empresa #' . (int)$id_pesquisa_empresa
        . ' | Pesquisa: ' . $nome_pesquisa_log
        . ' | Questionario: ' . $nome_questionario_log
        . ' | Empresa: ' . $empresa_log
        . ' | Status: ' . $status_nome_log
        . ' | Respostas processadas: ' . (int)$total_respostas_processadas
        . ' | Nota: ' . number_format((float)$nota_total_calc, 2, ',', '.')
        . ' | Classificacao: ' . $classificacao_calc,
    ['modulo' => 'processar_resposta_pesquisa.php']
);

// Redirecionar com sucesso
header('Location: responder_pesquisa.php?id=' . $id_pesquisa_empresa . '&msg=success');
exit;
?>
