<?php
require '../conexao/conexao.php';
require '../sessao.php';
$id_perfil = $_POST['id_perfil'] ?? null;
$novoPerfil = $_POST['novoPerfil'] ?? null;
$moduloIds = $_POST['moduloIds'] ?? [];
$moduloIds = array_filter($moduloIds, 'strlen'); // Remove elementos vazios

if (is_null($id_perfil) || $id_perfil == 0) {
    // Inicia a transação
    $connectionmysql->begin_transaction();

    try {
        // Inserindo o novo perfil na tabela perfil
        $stmt = $connectionmysql->prepare("INSERT INTO kpi.perfil (perfil, situacao) VALUES (?, ?)");
        $situacao = 'A';
        $stmt->bind_param("ss", $novoPerfil, $situacao);

        if ($stmt->execute()) {
            // Obtendo o ID do perfil recém-inserido
            $id_perfil = $stmt->insert_id;
            // Verifica se existem módulos para inserir
            if (!empty($moduloIds)) {
                $stmt_modulo = $connectionmysql->prepare("INSERT INTO kpi.perfil_modulo (id_perfil, id_modulo) VALUES (?, ?)");
                for ($i = 0; $i < count($moduloIds); $i++) {
                    $modulo = $moduloIds[$i];
                    $id_modulo = $moduloIds[$i];
                    $stmt_modulo->bind_param("ii",  $id_perfil, $id_modulo);
                    $stmt_modulo->execute();
                }
            }
            if (isset($_SESSION['filtros'])) {
                $query_string = http_build_query([
                    'perfil' => $_SESSION['filtros']['perfil'],
                    'form_submitted' => 1
                ]);
                $connectionmysql->commit();
                $location = './index.php?status=sucesso&' . $query_string;
                header("Location: $location");
                exit();
            } else {
                $connectionmysql->commit();
                $location = './index.php?status=sucesso';
                header("Location: $location");
                exit();
            }
        } else {
            throw new Exception("Erro ao inserir o perfil: " . $stmt->error);
        }
    } catch (Exception $e) {
        // Revertendo a transação em caso de erro
        $connectionmysql->rollback();
        echo "Erro: " . $e->getMessage();
    }
} else {
    try {
        // Atualizar o nome do perfil, se necessário
        $stmt = $connectionmysql->prepare("UPDATE kpi.perfil SET perfil = ? WHERE id_perfil = ?");
        $stmt->bind_param("si", $novoPerfil, $id_perfil);
        $stmt->execute();

        // Obter os módulos atuais do perfil
        $sql_modulos_atuais = "SELECT id_modulo FROM kpi.perfil_modulo WHERE id_perfil = ?";
        $stmt_modulos_atuais = $connectionmysql->prepare($sql_modulos_atuais);
        $stmt_modulos_atuais->bind_param("i", $id_perfil);
        $stmt_modulos_atuais->execute();
        $result_modulos_atuais = $stmt_modulos_atuais->get_result();

        $modulos_atuais = [];
        while ($row = $result_modulos_atuais->fetch_assoc()) {
            $modulos_atuais[] = $row['id_modulo'];
        }

        // Identificar módulos a serem adicionados e removidos
        $novos_modulos = array_diff($moduloIds, $modulos_atuais); // Módulos a serem adicionados
        $modulos_removidos = array_diff($modulos_atuais, $moduloIds); // Módulos a serem removidos

        // Inserir novos módulos
        if (!empty($novos_modulos)) {
            $sql_inserir_modulo = "INSERT INTO kpi.perfil_modulo (id_perfil, id_modulo) VALUES (?, ?)";
            $stmt_inserir_modulo = $connectionmysql->prepare($sql_inserir_modulo);
            foreach ($novos_modulos as $id_modulo) {
                $stmt_inserir_modulo->bind_param("ii", $id_perfil, $id_modulo);
                $stmt_inserir_modulo->execute();
            }
        }

        // Remover módulos antigos
        if (!empty($modulos_removidos)) {
            $sql_remover_modulo = "DELETE FROM kpi.perfil_modulo WHERE id_perfil = ? AND id_modulo = ?";
            $stmt_remover_modulo = $connectionmysql->prepare($sql_remover_modulo);
            foreach ($modulos_removidos as $id_modulo) {
                $stmt_remover_modulo->bind_param("ii", $id_perfil, $id_modulo);
                $stmt_remover_modulo->execute();
            }
        }
        $query_string = http_build_query([
            'perfil' => $id_perfil,
            'form_submitted' => 1
        ]);
        $connectionmysql->commit();
        $location = './index.php?status=sucesso&' . $query_string;
        header("Location: $location");
        exit();
    } catch (Exception $e) {
        // Revertendo a transação em caso de erro
        $connectionmysql->rollback();
        echo "Erro: " . $e->getMessage();
    }
}

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