<?php
define('DESATIVAR_LOG_AUTOMATICO', true);
include 'verifica_login.php';
require_once 'conexao.php';
require_once 'config/log_utils.php';
require_once 'config/departamento_modelo_utils.php';
require_once 'config/contato_status_modelo_utils.php';
$conn = conectar_banco();
garantir_modelo_departamento_padrao($conn);
garantir_modelo_contato_status_padrao($conn);

header('Content-Type: application/json');

try {
    $id_empresa = (int)($_POST['id_empresa'] ?? 0);
    $id_pesquisa_empresa = (int)($_POST['id_pesquisa_empresa'] ?? 0);
    $contato_id = (int)($_POST['contato_id'] ?? 0);
    $nome = trim($_POST['nome'] ?? '');
    $sobrenome = trim($_POST['sobrenome'] ?? '');
    $cargo = trim($_POST['cargo'] ?? '');
    $ddd = trim($_POST['ddd'] ?? '');
    $telefone = trim($_POST['telefone'] ?? '');
    $celular = trim($_POST['celular'] ?? '');
    $email = trim($_POST['email'] ?? '');
    $ramal = trim($_POST['ramal'] ?? '');
    $linkedin = trim($_POST['linkedin'] ?? '');
    $status = !empty($_POST['status']) ? (int)$_POST['status'] : null;
    $area = trim($_POST['area'] ?? '');
    $sexo = trim($_POST['sexo'] ?? '');
    $entrevistado = trim($_POST['entrevistado'] ?? '');

    // Novos campos de endereço
    $endereco = trim($_POST['endereco'] ?? '');
    $numero = trim($_POST['numero'] ?? '');
    $complemento = trim($_POST['complemento'] ?? '');
    $bairro = trim($_POST['bairro'] ?? '');
    $cidade = trim($_POST['cidade'] ?? '');
    $uf = trim($_POST['uf'] ?? '');
    $cep = trim($_POST['cep'] ?? '');

    // Se o contato está sendo editado no contexto de uma pesquisa, aplicar modelo de departamentos da pesquisa
    $idModeloContatoStatus = 0;
    if ($id_pesquisa_empresa > 0) {
        $stmtModelo = $conn->prepare("SELECT p.id_modelo_departamento_fk
            FROM pesquisa_empresa pe
            INNER JOIN pesquisas p ON p.id = pe.id_pesquisa_fk
            WHERE pe.id = ? LIMIT 1");
        if ($stmtModelo) {
            $stmtModelo->bind_param('i', $id_pesquisa_empresa);
            $stmtModelo->execute();
            $rowModelo = $stmtModelo->get_result()->fetch_assoc();
            $stmtModelo->close();

            $idModelo = (int)($rowModelo['id_modelo_departamento_fk'] ?? 0);
            if ($idModelo > 0) {
                $area = normalizar_area_por_modelo($conn, $idModelo, $area);
            }
        }

        $stmtModeloStatus = $conn->prepare("SELECT p.id_modelo_contato_status_fk
            FROM pesquisa_empresa pe
            INNER JOIN pesquisas p ON p.id = pe.id_pesquisa_fk
            WHERE pe.id = ? LIMIT 1");
        if ($stmtModeloStatus) {
            $stmtModeloStatus->bind_param('i', $id_pesquisa_empresa);
            $stmtModeloStatus->execute();
            $rowModeloStatus = $stmtModeloStatus->get_result()->fetch_assoc();
            $stmtModeloStatus->close();

            $idModeloContatoStatus = (int)($rowModeloStatus['id_modelo_contato_status_fk'] ?? 0);
        }
    }

    if ($idModeloContatoStatus <= 0) {
        $idModeloContatoStatus = garantir_modelo_contato_status_padrao($conn);
    }

    // Campos obrigatórios adicionais da tabela
    $depto = $area;
    $area_col = $area;
    $telefone1 = trim($_POST['telefone1'] ?? $telefone);
    $telefone2 = trim($_POST['telefone2'] ?? '');

    // Resolver status_contato (NOT NULL)
    $status_contato = '-';
    if ($status !== null) {
        if ($idModeloContatoStatus > 0) {
            $stmt_status = $conn->prepare("SELECT contato_status FROM contato_status_modelos_itens WHERE id_item = ? AND id_modelo_fk = ?");
            if ($stmt_status) {
                $stmt_status->bind_param('ii', $status, $idModeloContatoStatus);
                $stmt_status->execute();
                $row_status = $stmt_status->get_result()->fetch_assoc();
                if (!empty($row_status['contato_status'])) {
                    $status_contato = $row_status['contato_status'];
                } else {
                    $status = null;
                }
                $stmt_status->close();
            }
        } else {
            $stmt_status = $conn->prepare("SELECT contato_status FROM contato_status WHERE idcontato_status = ?");
            if ($stmt_status) {
                $stmt_status->bind_param('i', $status);
                $stmt_status->execute();
                $row_status = $stmt_status->get_result()->fetch_assoc();
                if (!empty($row_status['contato_status'])) {
                    $status_contato = $row_status['contato_status'];
                }
                $stmt_status->close();
            }
        }
    }

    if (!$id_empresa || !$nome) {
        echo json_encode(['success' => false, 'message' => 'Empresa e Nome são obrigatórios']);
        exit;
    }

    $debug_info = [];

    if ($contato_id > 0) {
        // UPDATE
        $sql_update = "
            UPDATE contatos_empresa SET
                nome = ?, sobrenome = ?, cargo = ?, ddd = ?, tel = ?,
                telefone1 = ?, celular = ?, telefone2 = ?, email = ?, ramal = ?,
                linkedin = ?, idcontato_status = ?, status_contato = ?, depto = ?, area = ?,
                sexo = ?, entrevistado = ?, endereco = ?, numero = ?, complemento = ?,
                bairro = ?, cidade = ?, uf = ?, cep = ?
            WHERE idcontatos_empresa = ?
        ";
        $stmt = $conn->prepare($sql_update);
        if (!$stmt) {
            throw new Exception("Erro na preparação da query de UPDATE: " . $conn->error);
        }
        $typesUpdate = str_repeat('s', 11) . 'i' . str_repeat('s', 12) . 'i';
        $stmt->bind_param(
            $typesUpdate,
            $nome, $sobrenome, $cargo, $ddd, $telefone,
            $telefone1, $celular, $telefone2, $email, $ramal,
            $linkedin, $status, $status_contato, $depto, $area_col,
            $sexo, $entrevistado, $endereco, $numero, $complemento,
            $bairro, $cidade, $uf, $cep,
            $contato_id
        );
        $debug_info = [
            'debug_sql' => trim($sql_update),
            'debug_types' => $typesUpdate,
            'debug_params' => [$nome, $sobrenome, $cargo, $ddd, $telefone, $telefone1, $celular, $telefone2, $email, $ramal, $linkedin, $status, $status_contato, $depto, $area_col, $sexo, $entrevistado, $endereco, $numero, $complemento, $bairro, $cidade, $uf, $cep, $contato_id]
        ];
    } else {
        // INSERT
        $sql_insert = "
            INSERT INTO contatos_empresa (
                id_empresa, nome, sobrenome, cargo, ddd, tel, telefone1, celular, telefone2,
                email, ramal, linkedin, idcontato_status, status_contato, depto, area,
                sexo, entrevistado, endereco, numero, complemento, bairro, cidade, uf, cep
            ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
        ";
        $stmt = $conn->prepare($sql_insert);
        if (!$stmt) {
            throw new Exception("Erro na preparação da query de INSERT: " . $conn->error);
        }
        $typesInsert = 'i' . str_repeat('s', 11) . 'i' . str_repeat('s', 12);
        $stmt->bind_param(
            $typesInsert,
            $id_empresa, $nome, $sobrenome, $cargo, $ddd, $telefone, $telefone1, $celular, $telefone2,
            $email, $ramal, $linkedin, $status, $status_contato, $depto, $area_col,
            $sexo, $entrevistado, $endereco, $numero, $complemento, $bairro, $cidade, $uf, $cep
        );
        $debug_info = [
            'debug_sql' => trim($sql_insert),
            'debug_types' => $typesInsert,
            'debug_params' => [$id_empresa, $nome, $sobrenome, $cargo, $ddd, $telefone, $telefone1, $celular, $telefone2, $email, $ramal, $linkedin, $status, $status_contato, $depto, $area_col, $sexo, $entrevistado, $endereco, $numero, $complemento, $bairro, $cidade, $uf, $cep]
        ];
    }

    error_log('[salvar_contato] ' . json_encode($debug_info, JSON_UNESCAPED_UNICODE));

    if ($stmt->execute()) {
        $tipo_log_contato = $contato_id > 0 ? 'QUESTIONARIO_CONTATO_ATUALIZADO' : 'QUESTIONARIO_CONTATO_CRIADO';
        $id_contato_log = $contato_id > 0 ? $contato_id : (int)$conn->insert_id;
        registrar_log_interacao(
            $conn,
            $tipo_log_contato,
            'Contato ' . ($contato_id > 0 ? 'atualizado' : 'criado')
                . ' | Pesquisa empresa: #' . (int)$id_pesquisa_empresa
                . ' | Empresa: #' . (int)$id_empresa
                . ' | Contato: #' . (int)$id_contato_log
                . ' | Nome: ' . $nome . ' ' . $sobrenome
                . ' | Cargo: ' . $cargo
                . ' | Status ID: ' . (int)$status,
            ['modulo' => 'salvar_contato.php']
        );
        echo json_encode(['success' => true, 'message' => $contato_id > 0 ? 'Contato atualizado com sucesso!' : 'Contato criado com sucesso!'] + $debug_info);
    } else {
        echo json_encode(['success' => false, 'message' => 'Erro ao salvar: ' . $stmt->error] + $debug_info);
    }
    $stmt->close();
} catch (Exception $e) {
    echo json_encode(['success' => false, 'message' => 'Erro: ' . $e->getMessage()]);
}
?>
