<?php
/**
 * auth_check.php — Valida sessão antes de servir conteúdo protegido
 * Inclua no topo de qualquer endpoint que exija login
 */

define('SESSION_DIR_AC', __DIR__ . '/data/sessions/');

function getTokenAC() {
    // Prioridade: body JSON > header > cookie > GET
    static $body = null;
    if ($body === null) {
        $raw  = file_get_contents('php://input');
        $body = json_decode($raw, true) ?: [];
    }
    if (!empty($body['token'])) return trim($body['token']);

    if (function_exists('getallheaders')) {
        $h = array_change_key_case(getallheaders(), CASE_LOWER);
        if (!empty($h['x-token'])) return trim($h['x-token']);
    }
    if (!empty($_SERVER['HTTP_X_TOKEN'])) return trim($_SERVER['HTTP_X_TOKEN']);
    if (!empty($_COOKIE['sonora_token'])) return trim($_COOKIE['sonora_token']);
    if (!empty($_GET['token']))           return trim($_GET['token']);
    return '';
}

function validateSession() {
    $token = getTokenAC();
    if (!$token) return false;
    $safe  = preg_replace('/[^a-f0-9]/', '', $token);
    if (strlen($safe) < 10) return false;
    $file  = SESSION_DIR_AC . $safe . '.json';
    if (!file_exists($file)) return false;
    $data  = json_decode(file_get_contents($file), true);
    if (!$data) return false;
    // Expira em 8 horas
    if ((time() - ($data['created_at'] ?? 0)) > 28800) {
        @unlink($file);
        return false;
    }
    return $data;
}

$__sess = validateSession();
if (!$__sess) {
    http_response_code(401);
    echo json_encode(['success' => false, 'error' => 'Sessão inválida. Faça login novamente.']);
    exit;
}
