<?php
require '../../conexao/conexao.php';
require '../../sessao.php';
require_once '../../conexao/logs.php';

$id_perfil   = $_POST['id_perfil'] ?? null;
$novoPerfil  = $_POST['novoPerfil'] ?? null;
$moduloIds   = $_POST['moduloIds'] ?? [];
$moduloIds   = array_filter($moduloIds, 'strlen'); // Remove elementos vazios

try {
    // Inicia a transação
    $connectionmysql->begin_transaction();

    if (is_null($id_perfil) || $id_perfil == 0) {
        // Inserir novo perfil
        $stmt = $connectionmysql->prepare("INSERT INTO kpi.perfil (perfil, situacao) VALUES (?, ?)");
        $situacao = 'A';
        $stmt->bind_param("ss", $novoPerfil, $situacao);
        $stmt->execute();

        // ID do perfil recém-criado
        $id_perfil = $stmt->insert_id;

        // 🔹 Registrar log de criação
        if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
            $dados_depois = [
                'id_perfil' => $id_perfil,
                'perfil'    => $novoPerfil,
                'situacao'  => $situacao,
                'modulos'   => $moduloIds
            ];
            registrarLogCriacaoDetalhado(
                90,
                $_SESSION['CodUsuario'],
                $_SESSION['NomeUsuario'],
                json_encode($dados_depois, JSON_UNESCAPED_UNICODE),
                $id_perfil
            );
        }

        // Inserir módulos, se houver
        if (!empty($moduloIds)) {
            $stmt_modulo = $connectionmysql->prepare("INSERT INTO kpi.perfil_modulo (id_perfil, id_modulo) VALUES (?, ?)");
            foreach ($moduloIds as $id_modulo) {
                $stmt_modulo->bind_param("ii", $id_perfil, $id_modulo);
                $stmt_modulo->execute();
            }
        }
    } else {
        // 🔹 Buscar dados antes da atualização
        $stmt_before = $connectionmysql->prepare("SELECT perfil, situacao FROM kpi.perfil WHERE id_perfil = ?");
        $stmt_before->bind_param("i", $id_perfil);
        $stmt_before->execute();
        $dados_antes = $stmt_before->get_result()->fetch_assoc();
        $stmt_before->close();

        // Buscar módulos atuais
        $stmt_modulos_atuais = $connectionmysql->prepare("SELECT id_modulo FROM kpi.perfil_modulo WHERE id_perfil = ?");
        $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'];
        }
        $stmt_modulos_atuais->close();

        // Atualizar nome do perfil
        $stmt = $connectionmysql->prepare("UPDATE kpi.perfil SET perfil = ? WHERE id_perfil = ?");
        $stmt->bind_param("si", $novoPerfil, $id_perfil);
        $stmt->execute();

        // Identificar módulos a adicionar e remover
        $novos_modulos = array_diff($moduloIds, $modulos_atuais);
        $modulos_removidos = array_diff($modulos_atuais, $moduloIds);

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

        // Remover módulos antigos
        if (!empty($modulos_removidos)) {
            $stmt_remover = $connectionmysql->prepare("DELETE FROM kpi.perfil_modulo WHERE id_perfil = ? AND id_modulo = ?");
            foreach ($modulos_removidos as $id_modulo) {
                $stmt_remover->bind_param("ii", $id_perfil, $id_modulo);
                $stmt_remover->execute();
            }
        }

        // 🔹 Registrar log de atualização
        if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
            $dados_depois = [
                'id_perfil' => $id_perfil,
                'perfil'    => $novoPerfil,
                'situacao'  => $dados_antes['situacao'], // não muda aqui, mas deixei
                'modulos'   => $moduloIds
            ];
            registrarLogAtualizacaoInteligente(
                90,
                $_SESSION['CodUsuario'],
                $_SESSION['NomeUsuario'],
                $dados_antes,
                $dados_depois,
                $id_perfil
            );
        }
    }

    // Commit da transação
    $connectionmysql->commit();

    // Redirecionamento
    $query_string = http_build_query([
        'perfil' => $id_perfil,
        'status' => 'sucesso',
        'form_submitted' => 1
    ]);
    header("Location: ./index.php?$query_string");
    exit();
} catch (Exception $e) {
    // Reverter transação em caso de erro
    $connectionmysql->rollback();
    echo "Erro: " . $e->getMessage();
}

if (isset($stmt)) {
    $stmt->close();
}
$connectionmysql->close();
