<?php
header('Content-Type: application/json; charset=UTF-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type');

// Garantir que a pasta de armazenamento existe
if (!is_dir('a/rtx')) {
    mkdir('a/rtx', 0777, true);
}

$arquivo = 'a/rtx/request.json';

// Processar POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $dados = json_decode(file_get_contents('php://input'), true);
    
    // Validar dados
    if (!$dados || !isset($dados['mac']) || empty($dados['mac'])) {
        http_response_code(400);
        echo json_encode(['error' => 'MAC address is required']);
        exit;
    }
    
    $mac_normalizado = strtoupper(trim($dados['mac']));
    $db_path = __DIR__ . '/a/.eggziedb.db';
    if (file_exists($db_path)) {
        $db_ativo = new SQLite3($db_path);
        $stmt_ativo = $db_ativo->prepare('SELECT 1 FROM ibo WHERE UPPER(TRIM(mac_address)) = :mac LIMIT 1');
        if ($stmt_ativo) {
            $stmt_ativo->bindValue(':mac', $mac_normalizado, SQLITE3_TEXT);
            if ($stmt_ativo->execute()->fetchArray(SQLITE3_NUM)) {
                $db_ativo->close();
                echo json_encode(['success' => true, 'status' => 'active', 'message' => 'MAC already belongs to an active client', 'mac' => $mac_normalizado]);
                exit;
            }
        }
        $db_ativo->close();
    }

    // Ler dados existentes
    $lista = file_exists($arquivo) ? json_decode(file_get_contents($arquivo), true) : [];
    if (!is_array($lista)) {
        $lista = [];
    }
    
    // Preparar novo registro
    $novo = [
        'mac' => $mac_normalizado,
        'deviceName' => isset($dados['deviceName']) ? trim($dados['deviceName']) : 'Desconhecido',
        'devID' => isset($dados['devID']) ? trim($dados['devID']) : '',
        'ip' => $_SERVER['REMOTE_ADDR'],
        'timestamp' => date('Y-m-d H:i:s')
    ];
    
    // Adicionar no início (mais recentes primeiro)
    array_unshift($lista, $novo);
    
    // Limitar a 500 registros
    $lista = array_slice($lista, 0, 500);
    
    // Salvar
    if (file_put_contents($arquivo, json_encode($lista, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), LOCK_EX)) {
        http_response_code(200);
        echo json_encode([
            'success' => true,
            'status' => 'ok',
            'message' => 'MAC registered successfully',
            'mac' => $novo['mac'],
            'timestamp' => $novo['timestamp']
        ]);
    } else {
        http_response_code(500);
        echo json_encode(['error' => 'Failed to save MAC']);
    }
    exit;
}

// Processar GET - retorna dados atuais
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    if (file_exists($arquivo)) {
        $json_content = file_get_contents($arquivo);
        $data = json_decode($json_content, true);
        if (is_array($data)) {
            http_response_code(200);
            echo json_encode([
                'success' => true,
                'total' => count($data),
                'data' => $data
            ]);
        } else {
            http_response_code(200);
            echo json_encode([
                'success' => true,
                'total' => 0,
                'data' => []
            ]);
        }
    } else {
        http_response_code(200);
        echo json_encode([
            'success' => true,
            'total' => 0,
            'data' => []
        ]);
    }
    exit;
}

// Processar OPTIONS (CORS preflight)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

// Método não permitido
http_response_code(405);
echo json_encode(['error' => 'Method not allowed']);
?>
