<?php
// /app/public/index.php

require_once __DIR__ . '/../app/license_guard.php';
license_guard_or_die();

define('BASE_PATH', dirname(__DIR__));

require_once BASE_PATH . '/app/config.php';
require_once BASE_PATH . '/app/helpers.php';
require_once BASE_PATH . '/app/routes.php';
require_once BASE_PATH . '/app/auth_middleware.php';
require_once BASE_PATH . '/app/db.php';
require_once BASE_PATH . '/app/plans.php';

/** Protege todas as páginas do router */
require_auth_or_redirect();

/** Página atual */
$page = $_GET['page'] ?? 'painel';

/** Garante que a rota exista */
if (!isset(ROUTES[$page])) {
    http_response_code(404);
    $page = 'painel';
}

/** Logout opcional por rota */
if ($page === 'sair') {
    header('Location: ' . BASE_URL . 'login');
    exit;
}

/* ===========================
   Guard por plano (DINÂMICO)
   =========================== */

// Páginas sempre liberadas (independente de plano)
$alwaysAllowed = ['painel', 'upgrade', 'minha_conta', 'sair'];

/**
 * Mapa de aliases: rota (URL) → feature do plano.
 * Quando a URL não bate com a key do catálogo de planos, mapeia aqui.
 * Se a rota NÃO estiver no mapa, usa o próprio nome da rota como feature.
 */
$routeToFeature = [
    'google' => 'extrator-maps',
    // Espaço pra futuros aliases:
    // 'rota-velha' => 'feature-nova',
];

if (!in_array($page, $alwaysAllowed, true)) {
    $featureKey = $routeToFeature[$page] ?? $page;
    if (!plans_user_can_view($featureKey)) {
        header('Location: ' . BASE_URL . 'index.php?page=upgrade&from=' . urlencode($page));
        exit;
    }
}

/** Dados da view */
$title       = ROUTES[$page]['title'] ?? 'Dashboard';
$contentView = BASE_PATH . '/views/pages/' . (ROUTES[$page]['view'] ?? 'painel.php');

/** Renderiza o layout principal */
view('layout', [
    'title'       => $title,
    'page'        => $page,
    'contentView' => $contentView,
    'appName'     => APP_NAME,
]);