<?php
declare(strict_types=1);

require_once __DIR__ . '/../vendor/autoload.php';
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__ . '/..');
$dotenv->load();

use Bienvy\Config\Router;
use Bienvy\Controllers\AuthController;
use Bienvy\Controllers\VisitaController;
use Bienvy\Controllers\CitaController;
use Bienvy\Controllers\FacturaController;
use Bienvy\Controllers\ConsultorioController;
use Bienvy\Controllers\FormularioController;
use Bienvy\Controllers\CamaraController;
use Bienvy\Controllers\EventController;
use Bienvy\Controllers\OnboardingController;
use Bienvy\Controllers\GoogleCalendarController;

// Stripear prefijo /bienvy del REQUEST_URI
$_SERVER['REQUEST_URI'] = preg_replace('#^/bienvy#', '', $_SERVER['REQUEST_URI']) ?: '/';

// El endpoint SSE no puede tener Content-Type: application/json
$uri    = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$esSse  = (bool) preg_match('#^/api/eventos/#', $uri);

if (!$esSse) {
    header('Content-Type: application/json; charset=utf-8');
}

header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Consultorio-ID, X-Kiosko');
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { http_response_code(200); exit; }

$router = new Router();

// Auth
$router->post('/api/auth/login',                        [AuthController::class, 'login']);
$router->post('/api/auth/refresh',                      [AuthController::class, 'refresh']);
$router->get('/api/ping',                               [AuthController::class, 'ping']);

// Consultorios
$router->get('/api/consultorios',                       [ConsultorioController::class, 'listar']);
$router->post('/api/consultorios',                      [ConsultorioController::class, 'crear']);
$router->put('/api/consultorios/{id}',                  [ConsultorioController::class, 'actualizar']);
$router->get('/api/consultorios/{id}/config',           [ConsultorioController::class, 'config']);

$router->get('/api/google/auth', [GoogleCalendarController::class, 'auth']);
$router->get('/api/google/callback', [GoogleCalendarController::class, 'callback']);
$router->get('/api/google/status', [GoogleCalendarController::class, 'status']);
$router->delete('/api/google/disconnect', [GoogleCalendarController::class, 'disconnect']);
$router->get('/api/google/eventos', [GoogleCalendarController::class, 'eventos']);
$router->post('/api/google/eventos', [GoogleCalendarController::class, 'crearEvento']);
$router->delete('/api/google/eventos/{id}', [GoogleCalendarController::class, 'eliminarEvento']);
$router->post('/api/onboarding/registro', [OnboardingController::class, 'registro']);
// Visitas
$router->post('/api/visitas',                           [VisitaController::class, 'crear']);
$router->get('/api/visitas/hoy',                        [VisitaController::class, 'hoy']);
$router->patch('/api/visitas/{id}/pasar',               [VisitaController::class, 'pasar']);
$router->patch('/api/visitas/{id}/finalizar',           [VisitaController::class, 'finalizar']);
$router->patch('/api/visitas/{id}/heartbeat',           [VisitaController::class, 'heartbeat']);

// Citas
$router->get('/api/citas/disponibilidad',               [CitaController::class, 'disponibilidad']);
$router->post('/api/citas',                             [CitaController::class, 'crear']);
$router->delete('/api/citas/{id}',                      [CitaController::class, 'cancelar']);

// Facturas
$router->post('/api/facturas',                          [FacturaController::class, 'generar']);
$router->post('/api/facturas/link-whatsapp',            [FacturaController::class, 'enviarLink']);
$router->get('/api/facturas/token/{token}',             [FacturaController::class, 'obtenerPorToken']);

// Formularios
$router->get('/api/formularios/{consultorio_id}',       [FormularioController::class, 'obtener']);
$router->post('/api/formularios/respuestas',            [FormularioController::class, 'guardarRespuestas']);
$router->get('/api/formularios/respuestas/{visita_id}', [FormularioController::class, 'obtenerRespuestas']);

// Cámara
$router->get('/api/camara/{consultorio_id}/stream',     [CamaraController::class, 'streamUrl']);

// SSE — eventos en tiempo real
$router->get('/api/eventos/{id}',                       [EventController::class, 'stream']);

$router->dispatch();