<?php
require '../conexao/conexao.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;

// 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)) {
        // Concatena todos os erros em uma única string separada por ponto e vírgula
        $mensagem_erro = implode(' e ', $erros);
        goBack('erro', $mensagem_erro, $filtros);
        exit;
    }
    
    // Insere os dados na tabela pessoa
    $stmt_pessoa = $connectionmysql->prepare("INSERT INTO pessoa (cpf, cnpj, nome, nome_razao, nome_fantasia, sexo, data_nascimento, tipo_pessoa,situacao) VALUES (?, ?, ?, ?, ?, ?, ?, ?,?)");

    // Verifica se a preparação da consulta foi bem-sucedida
    if (!$stmt_pessoa) {
        die('Erro na preparação da consulta INSERT pessoa: ' . $connectionmysql->error);
    }

    $bind_result_pessoa = $stmt_pessoa->bind_param("sssssssss", $cpf, $cnpj, $nome, $nome_razao, $nome_fantasia, $sexo, $data_nascimento, $tipo_pessoa, $situacao);

    // Verifica se o bind_param foi bem-sucedido
    if (!$bind_result_pessoa) {
        die('Erro ao vincular parâmetros da consulta INSERT pessoa: ' . $stmt_pessoa->error);
    }

    if ($stmt_pessoa->execute()) {
        // Recupera o ID da pessoa inserida
        $id_pessoa_inserido = $stmt_pessoa->insert_id;
        // Verifica se id_perfil, usuario e senha estão preenchidos antes de continuar

        // Insere dados na tabela usuario usando o ID da pessoa
        $stmt_usuario = $connectionmysql->prepare("INSERT INTO usuario (id_pessoa, usuario, login, senha) VALUES (?, ?, ?, ?)");

        // Verifica se a preparação da consulta foi bem-sucedida
        if (!$stmt_usuario) {
            die('Erro na preparação da consulta INSERT usuario: ' . $connectionmysql->error);
        }

        $bind_result_usuario = $stmt_usuario->bind_param("isss", $id_pessoa_inserido, $nome, $login, $senha_hash);

        // Verifica se o bind_param foi bem-sucedido
        if (!$bind_result_usuario) {
            die('Erro ao vincular parâmetros da consulta INSERT usuario: ' . $stmt_usuario->error);
        }

        if ($stmt_usuario->execute()) {
            // Recupera o ID do usuário inserido
            $id_usuario_inserido = $stmt_usuario->insert_id;

            // Verifica se $id_usuario_inserido não é null antes de inserir na tabela perfil_usuario
            if ($id_usuario_inserido !== null) {
                // Insere dados na tabela perfil_usuario usando o ID do usuário
                $stmt_perfil_usuario = $connectionmysql->prepare("INSERT INTO perfil_usuario (id_perfil, id_usuario) VALUES (?, ?)");

                // Verifica se a preparação da consulta foi bem-sucedida
                if (!$stmt_perfil_usuario) {
                    die('Erro na preparação da consulta INSERT perfil_usuario: ' . $connectionmysql->error);
                }

                $bind_result_perfil_usuario = $stmt_perfil_usuario->bind_param("ii", $id_perfil, $id_usuario_inserido);

                // Verifica se o bind_param foi bem-sucedido
                if (!$bind_result_perfil_usuario) {
                    die('Erro ao vincular parâmetros da consulta INSERT perfil_usuario: ' . $stmt_perfil_usuario->error);
                }

                if ($stmt_perfil_usuario->execute()) {
                    $filtros = isset($_SESSION['filtros']) ? http_build_query($_SESSION['filtros']) : '';

                    // Adicione os filtros como parâmetros GET no URL de redirecionamento
                    $location = './index.php?status=sucesso';
                    if (!empty($filtros)) {
                        $location .= '&' . $filtros;
                    }

                    // Redirecione para a página de destino
                    header("Location: $location");
                    exit;
                } else {
                    // Exibe detalhes do erro

                    echo "Erro ao executar a consulta INSERT perfil_usuario: " . $stmt_perfil_usuario->error;
                }
            } else {
                echo "Erro: ID do usuário inserido é nulo.";
            }
        } else {
            // Exibe detalhes do erro
            echo "Erro ao executar a consulta INSERT usuario: " . $stmt_usuario->error;

            // Finaliza o script aqui ou adicione um redirecionamento, se necessário
            exit;
        }
    } else {
        // Exibe detalhes do erro
        echo "Erro ao executar a consulta INSERT pessoa: " . $stmt_pessoa->error;
    }
} else {
    // ... Código de atualização

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

    if ($stmt->execute()) {
        // Verifica se o usuário já existe na tabela usuario
        $stmt_usuario_verificar = $connectionmysql->prepare("SELECT id_usuario FROM usuario WHERE id_pessoa = ?");
        $stmt_usuario_verificar->bind_param("i", $id_pessoa);
        $stmt_usuario_verificar->execute();
        $stmt_usuario_verificar->store_result();

        if ($stmt_usuario_verificar->num_rows > 0) {
            // O usuário já existe, então faz um UPDATE na tabela usuario
            $sql_update = "UPDATE usuario SET login = ?";
            if (
                $altera_password == "Sim"
            ) {
                $sql_update .= ", senha = ?";
            }
            $sql_update .= " WHERE id_pessoa = ?";

            $stmt_usuario_update = $connectionmysql->prepare($sql_update);

            if ($altera_password == "Sim") {
                $stmt_usuario_update->bind_param("ssi", $login, $senha_hash, $id_pessoa);
            } else {
                $stmt_usuario_update->bind_param("si", $login, $id_pessoa);
            }

            if ($stmt_usuario_update->execute()) {
                // Recupera o ID do usuário
                $stmt_usuario_verificar->bind_result($id_usuario);
                $stmt_usuario_verificar->fetch();

                // Verifica se o usuário já possui um perfil associado
                $stmt_perfil_usuario_verificar = $connectionmysql->prepare("SELECT id_usuario FROM perfil_usuario WHERE id_usuario = ?");
                $stmt_perfil_usuario_verificar->bind_param("i", $id_usuario);
                $stmt_perfil_usuario_verificar->execute();
                $stmt_perfil_usuario_verificar->store_result();

                if ($stmt_perfil_usuario_verificar->num_rows > 0) {
                    // O usuário já possui um perfil, então faz um UPDATE na tabela perfil_usuario
                    $stmt_perfil_usuario_update = $connectionmysql->prepare("UPDATE perfil_usuario SET id_perfil = ? WHERE id_usuario = ?");
                    $stmt_perfil_usuario_update->bind_param("ii", $id_perfil, $id_usuario);

                    if ($stmt_perfil_usuario_update->execute()) {
                        $filtros = isset($_SESSION['filtros']) ? http_build_query($_SESSION['filtros']) : '';

                        // Adicione os filtros como parâmetros GET no URL de redirecionamento
                        $location = 'index.php?status=sucesso';
                        if (!empty($filtros)) {
                            $location .= '&' . $filtros;
                        }

                        // Redirecione para a página de destino
                        header("Location: $location");
                        exit;
                    } else {
                        echo "Erro ao executar a consulta UPDATE perfil_usuario: " . $stmt_perfil_usuario_update->error;
                    }
                } else {
                    // O usuário não possui um perfil, então faz um INSERT na tabela perfil_usuario
                    $stmt_perfil_usuario_insert = $connectionmysql->prepare("INSERT INTO perfil_usuario (id_perfil, id_usuario) VALUES (?, ?)");
                    $stmt_perfil_usuario_insert->bind_param("ii", $id_perfil, $id_usuario);

                    if ($stmt_perfil_usuario_insert->execute()) {
                        $filtros = isset($_SESSION['filtros']) ? http_build_query($_SESSION['filtros']) : '';

                        // Adicione os filtros como parâmetros GET no URL de redirecionamento
                        $location = './index.php?status=sucesso';
                        if (!empty($filtros)) {
                            $location .= '&' . $filtros;
                        }

                        // Redirecione para a página de destino
                        header("Location: $location");
                        exit;
                    } else {
                        echo "Erro ao executar a consulta INSERT perfil_usuario: " . $stmt_perfil_usuario_insert->error;
                    }
                }
            } else {
                echo "Erro ao executar a consulta UPDATE usuario: " . $stmt_usuario_update->error;
            }
        } else {
            // O usuário não existe, então faz um INSERT na tabela usuario
            $stmt_usuario_insert = $connectionmysql->prepare("INSERT INTO usuario (id_pessoa, usuario, login, senha) VALUES (?, ?, ?, ?)");
            $stmt_usuario_insert->bind_param("isss", $id_pessoa, $nome, $login, $senha_hash);

            if ($stmt_usuario_insert->execute()) {
                // Recupera o ID do usuário inserido
                $id_usuario_inserido = $stmt_usuario_insert->insert_id;

                // Verifica se $id_usuario_inserido não é null antes de inserir na tabela perfil_usuario
                if ($id_usuario_inserido !== null) {
                    // Insere dados na tabela perfil_usuario usando o ID do usuário
                    $stmt_perfil_usuario = $connectionmysql->prepare("INSERT INTO perfil_usuario (id_perfil, id_usuario) VALUES (?, ?)");

                    // Verifica se a preparação da consulta foi bem-sucedida
                    if (!$stmt_perfil_usuario) {
                        die('Erro na preparação da consulta INSERT perfil_usuario: ' . $connectionmysql->error);
                    }

                    $bind_result_perfil_usuario = $stmt_perfil_usuario->bind_param("ii", $id_perfil, $id_usuario_inserido);

                    // Verifica se o bind_param foi bem-sucedido
                    if (!$bind_result_perfil_usuario) {
                        die('Erro ao vincular parâmetros da consulta INSERT perfil_usuario: ' . $stmt_perfil_usuario->error);
                    }

                    if ($stmt_perfil_usuario->execute()) {
                        $filtros = isset($_SESSION['filtros']) ? http_build_query($_SESSION['filtros']) : '';

                        // Adicione os filtros como parâmetros GET no URL de redirecionamento
                        $location = './index.php?status=sucesso';
                        if (!empty($filtros)) {
                            $location .= '&' . $filtros;
                        }

                        // Redirecione para a página de destino
                        header("Location: $location");
                        exit;
                    } else {
                        // Exibe detalhes do erro
                        echo "Erro ao executar a consulta INSERT perfil_usuario: " . $stmt_perfil_usuario->error;
                    }
                } else {
                    echo "Erro: ID do usuário inserido é nulo.";
                }
            } else {
                echo "Erro ao executar a consulta INSERT usuario: " . $stmt_usuario_insert->error;
            }
        }
    } else {
        echo "Erro ao executar a consulta UPDATE pessoa: " . $stmt->error;
    }
}
$stmt->close();
$connectionmysql->close();
