# Sharks Panel - nginx (PHP-FPM). Rădăcina web este DOAR folderul public/ ; config/, src/, bot/, database/ rămân în afara ei.
# Înlocuiește panel.sharks.ro, calea /var/www/sharks-panel și socketul PHP-FPM cu valorile tale.

server {
    listen 80;
    server_name panel.sharks.ro;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    http2 on;
    server_name panel.sharks.ro;

    ssl_certificate     /etc/letsencrypt/live/panel.sharks.ro/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/panel.sharks.ro/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;

    root /var/www/sharks-panel/public;
    index index.php;
    server_tokens off;
    client_max_body_size 1m;          # scripturile Guard au maxim 100 KB; formularele sunt mici

    # Fișiere ascunse și tot ce nu trebuie servit niciodată
    location ~ /\.(?!well-known) { deny all; }
    location ~* \.(sqlite|sql|log|bak|token|lock|md)$ { deny all; }

    # Fișiere statice cu cache lung (adresa include ?v=timestamp)
    location /assets/ {
        try_files $uri =404;
        expires 30d;
        add_header Cache-Control "public, immutable";
        add_header X-Content-Type-Options nosniff;
    }

    # Instalatorul există doar până îl rulezi o dată; după aceea se șterge singur.
    location = /install.php {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.5-fpm.sock;
    }

    # Orice alt .php trimis direct din browser este redirecționat de aplicație la varianta fără .php
    # (adresele publice nu conțin niciodată .php): /index.php -> /

    # Tot restul: linkuri curate (/canale, /topicuri/12-titlu, /profil/45-nick, /api/...)
    location / {
        try_files $uri /index.php$is_args$args;
    }

    location = /index.php {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.5-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root/index.php;
        fastcgi_read_timeout 30s;
        internal;                      # nu poate fi cerut direct; doar prin rescriere
    }

    # Limitare la nivel de server în plus față de limitarea din aplicație
    # (definește în http {}:  limit_req_zone $binary_remote_addr zone=sharks_login:10m rate=10r/m;)
    location = /api/auth/login {
        limit_req zone=sharks_login burst=5 nodelay;
        try_files /dev/null /index.php$is_args$args;
    }
}
