# ==============================================================================
# Fundación de Neuropsicología Clínica - Configuración de Servidor Web
# Servidores soportados: Apache 2.4+, LiteSpeed, cPanel
# ==============================================================================

# 1. Configuración de Directorios e Índices
<IfModule mod_dir.c>
    DirectorySlash On
    DirectoryIndex index.html admin_dashboard.html
</IfModule>
Options -Indexes

# 2. Codificación UTF-8 Universal
AddDefaultCharset UTF-8

# 3. Tipos MIME Correctos para Aplicaciones Web Modernas (JSON, JS, WASM)
<IfModule mod_mime.c>
    AddType application/json .json
    AddType application/javascript .js .mjs
    AddType application/wasm .wasm
    AddType text/css .css
    AddType text/html .html .htm
</IfModule>

# 4. Cabeceras CORS Universales y Control de Caché para APIs
<IfModule mod_headers.c>
    # Habilitar CORS para peticiones desde cualquier origen o subdominio
    Header always set Access-Control-Allow-Origin "*"
    Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
    Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With, Origin, Accept"
    Header always set Access-Control-Max-Age "86400"

    # Prevenir que las APIs queden en caché del navegador o proxies intermedios
    <FilesMatch "\.(php|json)$">
        Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
        Header set Pragma "no-cache"
        Header set Expires "0"
    </FilesMatch>
</IfModule>

# 5. Motor de Reescritura (mod_rewrite) y Manejo de Rutas
<IfModule mod_rewrite.c>
    RewriteEngine On

    # Si la petición es OPTIONS (preflight CORS), responder 200 OK inmediatamente
    RewriteCond %{REQUEST_METHOD} OPTIONS
    RewriteRule ^(.*)$ $1 [R=200,L]

    # Redirección de enlaces cortos de evaluación (/e/{codigo})
    RewriteRule ^e/([a-zA-Z0-9_.-]+)$ api_enlace_corto.php?c=$1 [L,QSA]

    # Endpoint para acortar enlaces privados autoalojados FNC
    RewriteRule ^api/acortar_enlace/?$ api_acortar.php [L,QSA]

    # Endpoints de autenticación nativa
    RewriteRule ^api/auth/login/?$ api_auth.php?action=login [L,QSA]
    RewriteRule ^api/auth/cambiar_password/?$ api_auth.php?action=cambiar_password [L,QSA]
    RewriteRule ^api/terapeutas/crear/?$ api_auth.php?action=crear [L,QSA]
    RewriteRule ^api/terapeutas/listar/?$ api_auth.php?action=listar [L,QSA]
    RewriteRule ^api/terapeutas/eliminar/?$ api_auth.php?action=eliminar [L,QSA]
    RewriteRule ^api/terapeutas/borrar/?$ api_auth.php?action=eliminar [L,QSA]
    RewriteRule ^api/terapeutas/?(.*)$ api_auth.php?action=$1 [L,QSA]

    # Mantener acceso directo a archivos existentes o directorios
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
</IfModule>

# 6. Tolerancia a Mayúsculas/Minúsculas en Servidores Linux (mod_speling)
<IfModule mod_speling.c>
    CheckSpelling On
    CheckCaseOnly On
</IfModule>

# 7. Protección de Archivos Confidenciales y Bases de Datos
# NOTA: PHP puede leer y escribir estos archivos mediante file_get_contents/file_put_contents,
# pero se bloquea el acceso HTTP directo desde la web para preservar el secreto médico clínico.
<FilesMatch "\.(db|sqlite|log|env|bak|ini)$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</FilesMatch>

<FilesMatch "(pacientes_db|evaluaciones_db|tokens_usados|terapeutas_db|shortener_db)\.json$">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</FilesMatch>
