<?php
/**
 * Espelho de Água — Entry point (root copy for Apache subdirectory)
 */

declare(strict_types=1);

// Boot
require_once __DIR__ . '/app/config.php';
require_once __DIR__ . '/app/lib/Database.php';
require_once __DIR__ . '/app/lib/Router.php';
require_once __DIR__ . '/app/lib/Auth.php';
require_once __DIR__ . '/app/lib/i18n.php';
require_once __DIR__ . '/app/lib/Stripe.php';
require_once __DIR__ . '/app/lib/helpers.php';

// Initialize i18n before any output
i18n::init();

// Controllers
require_once __DIR__ . '/app/controllers/Controller.php';
require_once __DIR__ . '/app/controllers/HomeController.php';
require_once __DIR__ . '/app/controllers/BlogController.php';
require_once __DIR__ . '/app/controllers/VideoController.php';
require_once __DIR__ . '/app/controllers/ResourceController.php';
require_once __DIR__ . '/app/controllers/ShopController.php';
require_once __DIR__ . '/app/controllers/CartController.php';
require_once __DIR__ . '/app/controllers/CheckoutController.php';
require_once __DIR__ . '/app/controllers/ContactController.php';
require_once __DIR__ . '/app/controllers/DownloadController.php';
require_once __DIR__ . '/app/controllers/AdminController.php';

// Router
$router = new Router();

// Public routes
$router->get('/', [HomeController::class, 'index']);
$router->get('/sobre', [HomeController::class, 'about']);
$router->get('/privacidade', [HomeController::class, 'privacy']);
$router->get('/termos', [HomeController::class, 'terms']);

$router->get('/blog', [BlogController::class, 'index']);
$router->get('/blog/{slug}', [BlogController::class, 'show']);

$router->get('/videos', [VideoController::class, 'index']);
$router->get('/videos/{slug}', [VideoController::class, 'show']);

$router->get('/recursos', [ResourceController::class, 'index']);
$router->get('/recursos/{slug}', [ResourceController::class, 'show']);

$router->get('/loja', [ShopController::class, 'index']);
$router->get('/loja/{slug}', [ShopController::class, 'show']);

$router->get('/carrinho', [CartController::class, 'index']);
$router->post('/carrinho/adicionar', [CartController::class, 'add']);
$router->post('/carrinho/atualizar', [CartController::class, 'update']);
$router->post('/carrinho/remover', [CartController::class, 'remove']);
$router->post('/carrinho/limpar', [CartController::class, 'clear']);

$router->get('/checkout', [CheckoutController::class, 'index']);
$router->post('/checkout/criar', [CheckoutController::class, 'createSession']);
$router->get('/checkout/success', [CheckoutController::class, 'success']);
$router->get('/checkout/cancel', [CheckoutController::class, 'cancel']);
$router->get('/checkout/manual', [CheckoutController::class, 'manual']);

$router->post('/webhook/stripe', [CheckoutController::class, 'webhook']);

$router->get('/contato', [ContactController::class, 'index']);
$router->post('/contato/enviar', [ContactController::class, 'send']);

$router->get('/download', [DownloadController::class, 'file']);

// Admin routes
$router->get('/admin/login', [AdminController::class, 'login']);
$router->post('/admin/login', [AdminController::class, 'login']);
$router->get('/admin/logout', [AdminController::class, 'logout']);
$router->post('/admin/logout', [AdminController::class, 'logout']);

$router->get('/admin', [AdminController::class, 'dashboard']);
$router->get('/admin/posts', [AdminController::class, 'posts']);
$router->get('/admin/posts/create', [AdminController::class, 'postCreate']);
$router->post('/admin/posts/create', [AdminController::class, 'postCreate']);
$router->get('/admin/posts/edit/{id}', [AdminController::class, 'postEdit']);
$router->post('/admin/posts/edit/{id}', [AdminController::class, 'postEdit']);
$router->post('/admin/posts/delete/{id}', [AdminController::class, 'postDelete']);

$router->get('/admin/videos', [AdminController::class, 'videos']);
$router->get('/admin/videos/create', [AdminController::class, 'videoCreate']);
$router->post('/admin/videos/create', [AdminController::class, 'videoCreate']);
$router->get('/admin/videos/edit/{id}', [AdminController::class, 'videoEdit']);
$router->post('/admin/videos/edit/{id}', [AdminController::class, 'videoEdit']);
$router->post('/admin/videos/delete/{id}', [AdminController::class, 'videoDelete']);

$router->get('/admin/recursos', [AdminController::class, 'resources']);
$router->get('/admin/recursos/create', [AdminController::class, 'resourceCreate']);
$router->post('/admin/recursos/create', [AdminController::class, 'resourceCreate']);
$router->get('/admin/recursos/edit/{id}', [AdminController::class, 'resourceEdit']);
$router->post('/admin/recursos/edit/{id}', [AdminController::class, 'resourceEdit']);
$router->post('/admin/recursos/delete/{id}', [AdminController::class, 'resourceDelete']);

$router->get('/admin/produtos', [AdminController::class, 'products']);
$router->get('/admin/produtos/create', [AdminController::class, 'productCreate']);
$router->post('/admin/produtos/create', [AdminController::class, 'productCreate']);
$router->get('/admin/produtos/edit/{id}', [AdminController::class, 'productEdit']);
$router->post('/admin/produtos/edit/{id}', [AdminController::class, 'productEdit']);
$router->post('/admin/produtos/delete/{id}', [AdminController::class, 'productDelete']);

$router->get('/admin/pedidos', [AdminController::class, 'orders']);
$router->get('/admin/pedidos/{id}', [AdminController::class, 'orderShow']);

// Dispatch
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$method = $_SERVER['REQUEST_METHOD'];

// Strip base path /espelhodeagua
$basePath = '/espelhodeagua';
if (strpos($uri, $basePath) === 0) {
    $uri = substr($uri, strlen($basePath)) ?: '/';
}

try {
    $router->dispatch($uri, $method);
} catch (Exception $e) {
    if (APP_DEBUG) {
        throw $e;
    }
    http_response_code(500);
    echo 'Erro interno. Tente novamente.';
}
