<?php
require '../../conexao/conexao.php';
require_once '../../conexao/logs.php';
session_start();

$id_departamento   = $_POST['id_departamento'] ?? null;
$novodepartamento  = $_POST['novodepartamento'] ?? null;
$situacao          = $_POST['situacao'] ?? 'A';
$setores           = $_POST['setores'] ?? '[]';

// Garante que $setores seja sempre array
if (is_string($setores)) {
    $setores = json_decode($setores, true) ?? [];
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $setoresRemovidos = json_decode($_POST['setores_removidos'], true);
    if (!empty($setoresRemovidos)) {
        $stmt = $connectionmysql->prepare("DELETE FROM setores WHERE id_setor = ?");
        if ($stmt) {
            foreach ($setoresRemovidos as $id_setor) {
                $stmt->bind_param("i", $id_setor);
                if (!$stmt->execute()) {
                    echo 'Erro ao executar a consulta DELETE: ' . $stmt->error;
                }
            }
            $stmt->close();
        } else {
            echo 'Erro na preparação da consulta DELETE: ' . $connectionmysql->error;
        }
    }


    if (is_null($id_departamento) || $id_departamento == 0) {
        // -------------------------
        // Inserção de novo departamento
        // -------------------------
        $stmt_departamento = $connectionmysql->prepare(
            "INSERT INTO departamentos (nome_departamento, situacao) VALUES (?, ?)"
        );
        if (!$stmt_departamento) die('Erro na preparação INSERT departamento: ' . $connectionmysql->error);

        $stmt_departamento->bind_param("ss", $novodepartamento, $situacao);

        if ($stmt_departamento->execute()) {
            $id_departamento_inserido = $stmt_departamento->insert_id;

            // Registrar log de criação
            if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                $dados_depois = [
                    'nome_departamento' => $novodepartamento,
                    'situacao'          => $situacao,
                    'setores'           => $setores
                ];
                registrarLogCriacaoDetalhado(
                    45,
                    $_SESSION['CodUsuario'],
                    $_SESSION['NomeUsuario'],
                    json_encode($dados_depois),
                    $id_departamento_inserido
                );
            }

            // Inserir setores
            $stmt_setor = $connectionmysql->prepare(
                "INSERT INTO setores (nome_setor, id_departamento) 
                 SELECT ?, ? FROM dual 
                 WHERE NOT EXISTS (
                     SELECT 1 FROM setores WHERE nome_setor = ? AND id_departamento = ?
                 )"
            );
            foreach ($setores as $setor) {
                $stmt_setor->bind_param("siss", $setor, $id_departamento_inserido, $setor, $id_departamento_inserido);
                $stmt_setor->execute();
            }
            $stmt_setor->close();

            header("Location: departamentos.php?status=sucesso");
            exit;
        } else {
            die("Erro ao inserir departamento: " . $stmt_departamento->error);
        }
    } else {
        // -------------------------
        // Atualização de departamento existente
        // -------------------------
        // Captura dados antes para log
        $stmt_select = $connectionmysql->prepare(
            "SELECT nome_departamento, situacao FROM departamentos WHERE id_departamento = ?"
        );
        $stmt_select->bind_param("i", $id_departamento);
        $stmt_select->execute();
        $dados_antes = $stmt_select->get_result()->fetch_assoc();
        $stmt_select->close();

        // Atualiza departamento
        $stmt_departamento = $connectionmysql->prepare(
            "UPDATE departamentos SET nome_departamento = ?, situacao = ? WHERE id_departamento = ?"
        );
        if (!$stmt_departamento) die('Erro na preparação UPDATE departamento: ' . $connectionmysql->error);

        $stmt_departamento->bind_param("ssi", $novodepartamento, $situacao, $id_departamento);

        if ($stmt_departamento->execute()) {
            // Registrar log de atualização
            if (isset($_SESSION['CodUsuario'], $_SESSION['NomeUsuario'])) {
                $dados_depois = [
                    'nome_departamento' => $novodepartamento,
                    'situacao'          => $situacao,
                    'setores'           => $setores
                ];
                registrarLogAtualizacaoInteligente(
                    43,
                    $_SESSION['CodUsuario'],
                    $_SESSION['NomeUsuario'],
                    $dados_antes,
                    $dados_depois,
                    $id_departamento
                );
            }

            // Inserir/atualizar setores (somente adiciona novos, não deleta existentes)
            $stmt_setor = $connectionmysql->prepare(
                "INSERT INTO setores (nome_setor, id_departamento) 
                 SELECT ?, ? FROM dual 
                 WHERE NOT EXISTS (
                     SELECT 1 FROM setores WHERE nome_setor = ? AND id_departamento = ?
                 )"
            );
            foreach ($setores as $setor) {
                $stmt_setor->bind_param("siss", $setor, $id_departamento, $setor, $id_departamento);
                $stmt_setor->execute();
            }
            $stmt_setor->close();

            header("Location: departamentos.php?status=sucesso");
            exit;
        } else {
            die("Erro ao atualizar departamento: " . $stmt_departamento->error);
        }
    }

    $stmt_departamento->close();
    $connectionmysql->close();
}
