<?php
/*
 * incidentes.php - API REST para gestao de incidentes
 * Metodos: GET (listar todos ou um), PUT (inserir novo)
 */

// Definir o tipo de conteudo JSON
header("Content-Type: application/json; charset=UTF-8");

// Incluir a ligacao a base de dados
require_once "../inc/db.php";

// Obter o metodo do pedido HTTP
$method = $_SERVER['REQUEST_METHOD'];

switch ($method) {
    case 'GET':
        handleGet($conn);
        break;

    case 'PUT':
        handlePut($conn);
        break;

    default:
        http_response_code(405);
        echo json_encode(["message" => "Method not allowed"]);
        break;
}

$conn->close();

// ============================================
// GET handler - Consulta
// ============================================
function handleGet($conn) {
    // Verificar se foi pedido um ID especifico
    if (isset($_GET['id'])) {
        $id = intval($_GET['id']);

        $stmt = $conn->prepare("SELECT * FROM incidentes WHERE id = ?");
        $stmt->bind_param("i", $id);
        $stmt->execute();
        $result = $stmt->get_result();

        if ($result->num_rows > 0) {
            $incidente = $result->fetch_assoc();
            http_response_code(200);
            echo json_encode($incidente);
        } else {
            http_response_code(404);
            echo json_encode(["message" => "Incidente nao encontrado"]);
        }

        $stmt->close();
    } else {
        // Devolver todos os incidentes
        $sql = "SELECT * FROM incidentes ORDER BY data_ocorrencia DESC";
        $result = $conn->query($sql);

        if ($result === false) {
            http_response_code(500);
            echo json_encode(["message" => "Erro ao consultar incidentes: " . $conn->error]);
            return;
        }

        $incidentes = [];
        while ($row = $result->fetch_assoc()) {
            $incidentes[] = $row;
        }

        http_response_code(200);
        echo json_encode($incidentes);
    }
}

// ============================================
// PUT handler - Inserir novo incidente
// ============================================
function handlePut($conn) {
    // Ler o input JSON do corpo do pedido
    $input = json_decode(file_get_contents("php://input"), true);

    // Verificar se houve erro na descodificacao do JSON
    if ($input === null && json_last_error() !== JSON_ERROR_NONE) {
        http_response_code(400);
        echo json_encode(["message" => "JSON invalido: " . json_last_error_msg()]);
        return;
    }

    // Validar os campos obrigatorios
    if (
        !isset($input['tipo']) ||
        !isset($input['descricao']) ||
        !isset($input['data_ocorrencia']) ||
        !isset($input['severidade']) ||
        !isset($input['origem'])
    ) {
        http_response_code(400);
        echo json_encode(["message" => "Todos os campos sao obrigatorios: tipo, descricao, data_ocorrencia, severidade, origem"]);
        return;
    }

    $tipo            = $input['tipo'];
    $descricao       = $input['descricao'];
    $data_ocorrencia = $input['data_ocorrencia'];
    $severidade      = $input['severidade'];
    $origem          = $input['origem'];

    // Validar os valores ENUM
    $tiposValidos = ['Phishing', 'Ransomware', 'DDoS'];
    $sevsValidas  = ['Baixa', 'Moderada', 'Alta', 'Critica'];

    if (!in_array($tipo, $tiposValidos) || !in_array($severidade, $sevsValidas)) {
        http_response_code(400);
        echo json_encode(["message" => "Valores invalidos para tipo ou severidade"]);
        return;
    }

    // Preparar a instrucao INSERT
    $stmt = $conn->prepare(
        "INSERT INTO incidentes (tipo, descricao, data_ocorrencia, severidade, origem) VALUES (?, ?, ?, ?, ?)"
    );
    $stmt->bind_param("sssss", $tipo, $descricao, $data_ocorrencia, $severidade, $origem);

    if ($stmt->execute()) {
        $newId = $conn->insert_id;
        http_response_code(201);
        echo json_encode([
            "message"     => "Incidente criado com sucesso",
            "id"          => $newId,
            "tipo"        => $tipo,
            "descricao"   => $descricao,
            "data_ocorrencia" => $data_ocorrencia,
            "severidade"  => $severidade,
            "origem"      => $origem
        ]);
    } else {
        http_response_code(500);
        echo json_encode(["message" => "Erro ao criar incidente: " . $stmt->error]);
    }

    $stmt->close();
}