<?php
require '../../conexao/conexao.php';
require '../../conexao/logs.php';
session_start();
// Obter os dados do formulário
function validarCpfELogin($cpf, $login, $connectionmysql)
{
    $erros = [];

    // Verifica se o CPF já existe
    $stmt_verifica_cpf = $connectionmysql->prepare("SELECT id_pessoa FROM pessoa WHERE cpf = ?");
    $stmt_verifica_cpf->bind_param("s", $cpf);
    $stmt_verifica_cpf->execute();
    $stmt_verifica_cpf->store_result();

    if ($stmt_verifica_cpf->num_rows > 0) {
        $erros[] = 'CPF já cadastrado';
    }

    // Verifica se o login já existe
    $stmt_verifica_login = $connectionmysql->prepare("SELECT id_usuario FROM usuario WHERE login = ?");
    $stmt_verifica_login->bind_param("s", $login);
    $stmt_verifica_login->execute();
    $stmt_verifica_login->store_result();

    if ($stmt_verifica_login->num_rows > 0) {
        $erros[] = 'Login já cadastrado.';
    }

    // 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;
}


$id_pessoa = $_POST['id_pessoa'] ?? null;
$tipo_pessoa = 'f'; // Adicionado
$cpf = $_POST['cpf'] ?? null;
$cnpj = $_POST['cnpj'] ?? null;
$nome = $_POST['nome'] ?? null;
$nome_razao = $_POST['nome_razao'] ?? null;
$nome_fantasia = $_POST['nome_fantasia'] ?? null;
$sexo = $_POST['sexo'] ?? null;
$data_nascimento = $_POST['data_nascimento'] ?? null;
$login = $_POST['login'] ?? null;
$senha = $_POST['senha'] ?? null;
$senha_hash = md5($senha);
$altera_password = $_POST['altera_password'] ?? null;
$situacao = $_POST['situacao'] ?? null;
$id_perfil = $_POST['perfil'] ?? null;
$filial = $_POST['filial'] ?? null;
$cidade = $_POST['cidade'] ?? null;

// Criar um array com os filtros
$filtros = [
    'id_pessoa' => $id_pessoa,
    'tipo_pessoa' => $tipo_pessoa,
    'cpf' => $cpf,
    'nome' => $nome,
    'sexo' => $sexo,
    'data_nascimento' => $data_nascimento,
    'login' => $login,
    'senha' => $senha,
    'altera_password' => $altera_password,
    'situacao' => $situacao,
    'perfil' => $id_perfil,
];


if (is_null($id_pessoa) || $id_pessoa == 0) {

    $erros = validarCpfELogin($cpf, $login, $connectionmysql);
    if (!empty($erros)) {
        $mensagem_erro = implode(' e ', $erros);
        goBack('erro', $mensagem_erro, $filtros);
        exit;
    }

    $stmt_pessoa = $connectionmysql->prepare("INSERT INTO pessoa (cpf, cnpj, nome, nome_razao, nome_fantasia, sexo, data_nascimento, tipo_pessoa, situacao, cidade) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
    $stmt_pessoa->bind_param("ssssssssss", $cpf, $cnpj, $nome, $nome_razao, $nome_fantasia, $sexo, $data_nascimento, $tipo_pessoa, $situacao, $cidade);

    if ($stmt_pessoa->execute()) {
        $id_pessoa_inserido = $stmt_pessoa->insert_id;

        $stmt_usuario = $connectionmysql->prepare("INSERT INTO usuario (id_pessoa, usuario, login, senha) VALUES (?, ?, ?, ?)");
        $stmt_usuario->bind_param("isss", $id_pessoa_inserido, $nome, $login, $senha_hash);

        if ($stmt_usuario->execute()) {
            $id_usuario_inserido = $stmt_usuario->insert_id;

            if ($id_usuario_inserido !== null) {
                $stmt_perfil_usuario = $connectionmysql->prepare("INSERT INTO perfil_usuario (id_perfil, id_usuario) VALUES (?, ?)");
                $stmt_perfil_usuario->bind_param("ii", $id_perfil, $id_usuario_inserido);

                if ($stmt_perfil_usuario->execute()) {

                    // 🔹 Registrar log de criação
                    if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                        $dados_depois = [
                            'id_pessoa' => $id_pessoa_inserido,
                            'cpf'       => $cpf,
                            'nome'      => $nome,
                            'login'     => $login,
                            'situacao'  => $situacao,
                            'perfil'    => $id_perfil,
                            'filiais'   => $filial // ou $filialArray se tiver mais de uma
                        ];
                        registrarLogCriacaoDetalhado(
                            35, // id_tipo_log para criação de usuário
                            $_SESSION['CodUsuario'],
                            $_SESSION['NomeUsuario'],
                            json_encode($dados_depois, JSON_UNESCAPED_UNICODE),
                            $id_pessoa_inserido
                        );
                    }

                    $_SESSION['log_acao'] = 'criar';
                    $location = './usuarios.php?status=sucesso';
                    $filtros = isset($_SESSION['filtros']) ? http_build_query($_SESSION['filtros']) : '';
                    if (!empty($filtros)) {
                        $location .= '&' . $filtros;
                    }
                    header("Location: $location");
                    exit;
                }
            }
        }
    }

    // =========================================
    // Atualização
    // =========================================
} else {
    // 🔹 Buscar dados antes para log
    $stmt_select = $connectionmysql->prepare("
        SELECT p.*, u.id_usuario, u.login, pu.id_perfil 
        FROM pessoa p 
        LEFT JOIN usuario u ON p.id_pessoa = u.id_pessoa
        LEFT JOIN perfil_usuario pu ON u.id_usuario = pu.id_usuario
        WHERE p.id_pessoa = ?
    ");
    $stmt_select->bind_param("i", $id_pessoa);
    $stmt_select->execute();
    $result = $stmt_select->get_result();
    $dados_antes = $result->fetch_assoc() ?: [];
    $stmt_select->close();

    // Atualiza pessoa
    $stmt = $connectionmysql->prepare("
        UPDATE pessoa 
        SET cpf = ?, cnpj = ?, nome = ?, nome_razao = ?, nome_fantasia = ?, 
            sexo = ?, data_nascimento = ?, situacao = ?, cidade = ? 
        WHERE id_pessoa = ?
    ");
    $stmt->bind_param(
        "sssssssssi",
        $cpf, $cnpj, $nome, $nome_razao, $nome_fantasia,
        $sexo, $data_nascimento, $situacao, $cidade, $id_pessoa
    );

    if ($stmt->execute()) {
        // Atualiza usuario
        $id_usuario = $dados_antes['id_usuario'] ?? null;

        if ($id_usuario) {
            $login_seguro = !empty($login) ? $login : $dados_antes['login'];
            if ($altera_password == 'Sim') {
                $stmt_usuario = $connectionmysql->prepare("
                    UPDATE usuario 
                    SET usuario = ?, login = ?, senha = ? 
                    WHERE id_usuario = ?
                ");

                $stmt_usuario->bind_param("sssi", $nome, $login_seguro, $senha_hash, $id_usuario);
            } else {
                $stmt_usuario = $connectionmysql->prepare("
                    UPDATE usuario 
                    SET usuario = ?, login = ? 
                    WHERE id_usuario = ?
                ");
                $stmt_usuario->bind_param("ssi", $nome, $login_seguro, $id_usuario);
            }
            
            $stmt_usuario->execute();
            $stmt_usuario->close();

            // Atualiza perfil_usuario
            $stmt_perfil = $connectionmysql->prepare("
                UPDATE perfil_usuario 
                SET id_perfil = ? 
                WHERE id_usuario = ?
            ");
            $stmt_perfil->bind_param("ii", $id_perfil, $id_usuario);
            $stmt_perfil->execute();
            $stmt_perfil->close();
        }

        // 🔹 Registrar log de atualização
        if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
            $dados_depois = [
                'id_pessoa' => $id_pessoa,
                'cpf'       => $cpf,
                'nome'      => $nome,
                'login'     => $login,
                'situacao'  => $situacao,
                'perfil'    => $id_perfil,
                'filiais'   => $filial // ou $filialArray
            ];
            registrarLogAtualizacaoInteligente(
                33, // id_tipo_log para atualização de usuário
                $_SESSION['CodUsuario'],
                $_SESSION['NomeUsuario'],
                $dados_antes,
                $dados_depois,
                $id_pessoa
            );
        }

        $_SESSION['log_acao'] = 'atualizar';
        $location = 'usuarios.php?status=sucesso';
        $filtros = isset($_SESSION['filtros']) ? http_build_query($_SESSION['filtros']) : '';
        if (!empty($filtros)) {
            $location .= '&' . $filtros;
        }
        header("Location: $location");
        exit;
    }
}


$stmt->close();
$connectionmysql->close();
