worker_processes 1;
error_log /var/log/nginx/error.log warn;

events {
    worker_connections 768;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    access_log /var/log/nginx/access.log;
    sendfile on;
    keepalive_timeout 65;
    gzip on;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

    server {
        listen 80 default_server;
        server_name _;
        root /usr/share/nginx/html;
        index index.html index.htm;

        # Proxy API requests to backend
        location /rpc/v1 {
            proxy_pass http://neode-backend:5959;
            proxy_http_version 1.1;
            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 WebSocket connections
        location /ws {
            proxy_pass http://neode-backend:5959;
            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 86400;
        }

        # Proxy public assets from backend
        location /public {
            proxy_pass http://neode-backend:5959;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # Proxy REST API requests
        location /rest {
            proxy_pass http://neode-backend:5959;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # Proxy FileBrowser API to mock backend (demo mode)
        location /app/filebrowser/ {
            proxy_pass http://neode-backend:5959;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # Serve AIUI SPA
        location /aiui/ {
            alias /usr/share/nginx/html/aiui/;
            try_files $uri $uri/ /aiui/index.html;

            location ~* /aiui/assets/ {
                expires 1y;
                add_header Cache-Control "public, immutable";
            }
        }

        # Proxy AIUI API requests (web-search, etc.) to backend
        location /api/ {
            proxy_pass http://neode-backend:5959;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # Proxy Claude API requests to backend (which handles API key + streaming)
        location /aiui/api/claude/ {
            proxy_pass http://neode-backend:5959;
            proxy_http_version 1.1;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_buffering off;
            proxy_cache off;
            proxy_read_timeout 300s;
            proxy_set_header Connection "";
        }

        # Serve static files
        location / {
            try_files $uri $uri/ /index.html;
        }

        # Cache static assets
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
            expires 1y;
            add_header Cache-Control "public, immutable";
        }
    }
}
