<?php
require '../../conexao/conexao.php';
session_start();
// Obter os dados do formulário
$id_departamento = $_POST['id_departamento'] ?? null;
$novodepartamento = $_POST['novodepartamento'] ?? null;
$situacao = $_POST['situacao'] ?? null;
$setores = $_POST['setores'] ?? [];

// Verifica se os setores são recebidos como uma string JSON e os decodifica
if (is_string($setores)) {
    $setores = json_decode($setores, true);
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // Obter setores a serem removidos
    $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;
        }
    }
}

// Verifica se o departamento já existe
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 da consulta INSERT departamento: ' . $connectionmysql->error);
    }

    $stmt_departamento->bind_param("ss", $novodepartamento, $situacao);
    if ($stmt_departamento->execute()) {
        // Recupera o ID do departamento inserido
        $id_departamento_inserido = $stmt_departamento->insert_id;

        // Inserir os setores associados ao departamento (apenas os novos)
        $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 = ?)");
        if (!$stmt_setor) {
            die('Erro na preparação da consulta INSERT setor: ' . $connectionmysql->error);
        }

        foreach ($setores as $setor) {
            $stmt_setor->bind_param("siss", $setor, $id_departamento_inserido, $setor, $id_departamento_inserido);
            if (!$stmt_setor->execute()) {
                echo "Erro ao executar a consulta INSERT setor: " . $stmt_setor->error;
            }
        }
        header("Location: departamentos.php?status=sucesso");
        exit;
    } else {
        echo "Erro ao executar a consulta INSERT departamentos: " . $stmt_departamento->error;
    }
} else {
    // Atualização de um departamento existente
    $stmt_departamento = $connectionmysql->prepare("UPDATE departamentos SET nome_departamento = ? WHERE id_departamento = ?");
    if (!$stmt_departamento) {
        die('Erro na preparação da consulta UPDATE departamento: ' . $connectionmysql->error);
    }

    $stmt_departamento->bind_param("si", $novodepartamento, $id_departamento);
    if ($stmt_departamento->execute()) {
        // Inserir ou atualizar os setores associados ao departamento (apenas os novos)
        $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 = ?) ON DUPLICATE KEY UPDATE nome_setor = VALUES(nome_setor)");
        if (!$stmt_setor) {
            die('Erro na preparação da consulta INSERT setor: ' . $connectionmysql->error);
        }

        foreach ($setores as $setor) {
            $stmt_setor->bind_param("siss", $setor, $id_departamento, $setor, $id_departamento);
            if (!$stmt_setor->execute()) {
                echo "Erro ao executar a consulta INSERT setor: " . $stmt_setor->error;
            }
        }

        header("Location: departamentos.php?status=sucesso");
        exit;
    } else {
        echo "Erro ao executar a consulta UPDATE departamento: " . $stmt_departamento->error;
    }
}

// Fechar as declarações
$stmt_departamento->close();
if (isset($stmt_setor)) {
    $stmt_setor->close();
}
$connectionmysql->close();
