# ============================================================
#  SiGeM — Nginx (Produção)
#  Município de Moatize
# ============================================================

# Redirecionar HTTP → HTTPS
server {
    listen 80;
    server_name sigem.isc-hefsiba.ac.mz portal.isc-hefsiba.ac.mz;
    return 301 https://$host$request_uri;
}

# HTTPS principal
server {
    listen 443 ssl http2;
    server_name sigem.isc-hefsiba.ac.mz;

    # SSL
    ssl_certificate     /etc/ssl/sigem/fullchain.pem;
    ssl_certificate_key /etc/ssl/sigem/privkey.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;
    ssl_session_cache   shared:SSL:10m;
    ssl_session_timeout 1d;
    ssl_stapling        on;
    ssl_stapling_verify on;

    # Segurança
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header X-Frame-Options           DENY                always;
    add_header X-Content-Type-Options    nosniff             always;
    add_header X-XSS-Protection         "1; mode=block"     always;
    add_header Referrer-Policy          "strict-origin"      always;
    add_header Permissions-Policy       "geolocation=(self)" always;

    # Logs
    access_log /var/log/nginx/sigem_access.log combined;
    error_log  /var/log/nginx/sigem_error.log  warn;

    # Gzip
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
    gzip_min_length 1024;

    # Frontend (React SPA)
    root /usr/share/nginx/html;
    index index.html;

    location / {
        try_files $uri $uri/ /index.html;
        expires 1h;
        add_header Cache-Control "public, no-transform";
    }

    # Assets estáticos — cache longo
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2|woff|ttf)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # API — proxy para backend
    location /api/ {
        proxy_pass         http://backend:3000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade          $http_upgrade;
        proxy_set_header   Connection       "upgrade";
        proxy_set_header   Host             $host;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout  300s;
        proxy_send_timeout  300s;
        proxy_buffer_size   128k;
        proxy_buffers       4 256k;
        client_max_body_size 15m;
    }

    # Verificação de alvarás (pública)
    location /verificar/ {
        proxy_pass http://backend:3000;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # Health check
    location /health {
        proxy_pass http://backend:3000/health;
        access_log off;
    }

    # Uploads (restrito)
    location /uploads/ {
        proxy_pass http://backend:3000/uploads/;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # Bloquear acesso a ficheiros sensíveis
    location ~ /\.(env|git|htaccess) {
        deny all;
        return 404;
    }
}
