<?php
require '../../conexao/conexao.php';
require '../../configuacoes.php';
require_once '../../conexao/logs.php';
function validarUsuario($id_funcionario, $id_pessoa, $connectionmysql)
{
    $erros = [];
    $query = "SELECT f.id_pessoa FROM funcionarios f
              WHERE 1=1 ";

    // Se estiver atualizando, excluímos o registro atual da verificação
    if (!is_null($id_funcionario) && $id_funcionario > 0) {
        $query .= " AND f.id_funcionario != ? AND f.id_pessoa = ?";
    }

    $stmt_verifica = $connectionmysql->prepare($query);

    if (!is_null($id_pessoa)) {
        $stmt_verifica->bind_param("si", $id_funcionario, $id_pessoa);
    } else {
        $stmt_verifica->bind_param("s", $id_funcionario);
    }

    $stmt_verifica->execute();
    $stmt_verifica->store_result();

    if ($stmt_verifica->num_rows > 0) {
        $erros[] = 'Usuário em uso';
    }

    // Retorna um array com os erros encontrados
    return $erros;
}
function validarUsuarioinsert($id_pessoa, $connectionmysql)
{
    $erros = [];
    $query = "SELECT f.id_pessoa FROM funcionarios f
              WHERE 1=1 ";

    // Se estiver atualizando, excluímos o registro atual da verificação
    if (!is_null($id_pessoa) && $id_pessoa > 0) {
        $query .= " AND f.id_pessoa = ?";
    }

    $stmt_verifica = $connectionmysql->prepare($query);

    if (!is_null($id_pessoa)) {
        $stmt_verifica->bind_param("s", $id_pessoa);
    } else {
        $stmt_verifica->bind_param("s", $id_pessoa);
    }

    $stmt_verifica->execute();
    $stmt_verifica->store_result();

    if ($stmt_verifica->num_rows > 0) {
        $erros[] = 'Usuário em uso';
    }

    // Retorna um array com os erros encontrados
    return $erros;
}
function goBack($status, $message = '', $filters = [])
{
    echo "<script>
        var previousUrl = document.referrer;
        var statusParam = 'status=' + encodeURIComponent('{$status}');
        var messageParam = '{$message}' ? '&message=' + encodeURIComponent('{$message}') : '';

        var filters = " . json_encode($filters) . ";

        var filterParams = '';
        for (var key in filters) {
            if (filters[key]) {
                filterParams += '&' + encodeURIComponent(key) + '=' + encodeURIComponent(filters[key]);
            }
        }

        if (previousUrl.includes('?')) {
            previousUrl += '&' + statusParam + messageParam + filterParams;
        } else {
            previousUrl += '?' + statusParam + messageParam + filterParams;
        }

        window.location.href = previousUrl;
    </script>";
    exit;
}

// Obter os dados do formulário
$id_funcionario = $_POST['id_funcionario'] ?? null;
$nome = $_POST['name'] ?? null;
$id_departamento = $_POST['departamento'] ?? null;
$id_setor = $_POST['setor'] ?? null;
$id_pessoa = $_POST['nome_pessoa'] ?? null;
$cod_fcerta = $_POST['cod_fcerta'] ?? null;
$situacao = $_POST['situacao'] ?? 'A';

$query_string = $_POST['url'] ?? null;


$filtros = [
    'id_pessoa' => $id_pessoa,
    'id_setor' => $id_setor,
    'cod_fcerta' => $cod_fcerta,
    'nome_inclusao' => $nome,
    'id_funcionario' => $id_funcionario,
    'departamento_inclusao' => $id_departamento,
];
//die(var_dump($filtros));


if (is_null($id_funcionario) || $id_funcionario == 0) {
    // Inserção
    if ($id_pessoa && !empty($id_pessoa)) {
        $erros = validarUsuarioinsert($id_pessoa, $connectionmysql);
        if (!empty($erros)) {
            goBack('erro', implode(' e ', $erros), $filtros);
        }
    }

    $stmt_insercao = $connectionmysql->prepare(
        "INSERT INTO funcionarios (nome, id_departamento, id_setor, id_pessoa, cod_fcerta, situacao) VALUES (?, ?, ?, ?, ?, ?)"
    );
    $stmt_insercao->bind_param("siiiis", $nome, $id_departamento, $id_setor, $id_pessoa, $cod_fcerta, $situacao);
    $stmt_insercao->execute();

    $id_funcionario_inserido = $stmt_insercao->insert_id; // ✅ pega o ID inserido

    // 🔹 Registrar log de criação
    if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
        $dados_depois = [
            'id_funcionario' => $id_funcionario_inserido,
            'nome' => $nome,
            'id_departamento' => $id_departamento,
            'id_setor' => $id_setor,
            'id_pessoa' => $id_pessoa,
            'cod_fcerta' => $cod_fcerta,
            'situacao' => $situacao
        ];
        registrarLogCriacaoDetalhado(
            38,
            $_SESSION['CodUsuario'],
            $_SESSION['NomeUsuario'],
            json_encode($dados_depois),
            $id_funcionario_inserido
        );
    }

    $stmt_insercao->close();
    header("Location: funcionarios.php?status=sucesso&$query_string");
    exit;
} else {
    // Atualização
    // 🔹 Captura dados antes da atualização para log
    $stmt_select = $connectionmysql->prepare(
        "SELECT nome, id_departamento, id_setor, id_pessoa, cod_fcerta, situacao FROM funcionarios WHERE id_funcionario = ?"
    );
    $stmt_select->bind_param("i", $id_funcionario);
    $stmt_select->execute();
    $dados_antes = $stmt_select->get_result()->fetch_assoc();
    $stmt_select->close();

    if ($id_pessoa && !empty($id_pessoa)) {
        $erros = validarUsuario($id_funcionario, $id_pessoa, $connectionmysql);
        if (!empty($erros)) {
            goBack('erro', implode(' e ', $erros), $filtros);
        }
    }

    $stmt_update = $connectionmysql->prepare(
        "UPDATE funcionarios SET nome=?, id_departamento=?, id_setor=?, id_pessoa=?, cod_fcerta=?, situacao=? WHERE id_funcionario=?"
    );
    $stmt_update->bind_param("siiiisi", $nome, $id_departamento, $id_setor, $id_pessoa, $cod_fcerta, $situacao, $id_funcionario);
    $stmt_update->execute();

    // 🔹 Registrar log de atualização
    if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
        $dados_depois = [
            'id_funcionario' => $id_funcionario,
            'nome' => $nome,
            'id_departamento' => $id_departamento,
            'id_setor' => $id_setor,
            'id_pessoa' => $id_pessoa,
            'cod_fcerta' => $cod_fcerta,
            'situacao' => $situacao
        ];
        registrarLogAtualizacaoInteligente(
            37,
            $_SESSION['CodUsuario'],
            $_SESSION['NomeUsuario'],
            $dados_antes,
            $dados_depois,
            $id_funcionario
        );
    }

    $stmt_update->close();
    header("Location: funcionarios.php?status=sucesso&$query_string");
    exit;
}

// Fecha a conexão com o banco de dados
$connectionmysql->close();
