# Wakelai Nginx Configuration

events {
    worker_connections 1024;
}

http {
    upstream wakelai_backend {
        server wakelai:4000;
    }

    # Rate limiting
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
    limit_req_zone $binary_remote_addr zone=general_limit:10m rate=30r/s;

    server {
        listen 80;
        server_name wakelai.com;

        # Redirect to HTTPS
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name wakelai.com;

        # SSL configuration
        ssl_certificate /etc/nginx/ssl/fullchain.pem;
        ssl_certificate_key /etc/nginx/ssl/privkey.pem;
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Security headers
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-XSS-Protection "1; mode=block" always;

        # Logging
        access_log /var/log/nginx/wakelai_access.log;
        error_log /var/log/nginx/wakelai_error.log;

        # Main application
        location / {
            limit_req zone=general_limit burst=50 nodelay;
            proxy_pass http://wakelai_backend;
            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;
        }

        # API endpoints
        location /api/ {
            limit_req zone=api_limit burst=20 nodelay;
            proxy_pass http://wakelai_backend;
            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;
        }

        # Static files
        location /static/ {
            alias /usr/share/nginx/static/;
            expires 7d;
            add_header Cache-Control "public, immutable";
        }

        # Instance subdomains (for multi-tenant instances)
        # This requires wildcard SSL certificate
        server {
            listen 443 ssl http2;
            server_name *.wakelai.com;

            ssl_certificate /etc/nginx/ssl/wildcard-fullchain.pem;
            ssl_certificate_key /etc/nginx/ssl/wildcard-privkey.pem;
            ssl_protocols TLSv1.2 TLSv1.3;

            location / {
                proxy_pass http://wakelai_backend;
                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;
            }
        }
    }
}
