# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

events {}

http {
    include       mime.types;
    default_type  application/octet-stream;

    # Suppress per-request access logs; errors still go to error_log.
    access_log off;

    server {
        listen 8080;

        location /api/compile {
            proxy_pass http://workflow-compiling-service:9090;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /api/dataset {
            proxy_pass http://file-service:9092;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /api/access/dataset/ {
            proxy_pass http://file-service:9092;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /api/config {
            proxy_pass http://config-service:9094;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /api/computing-unit {
            proxy_pass http://workflow-computing-unit-managing-service:8888;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        # LLM API traffic goes through access-control-service, which then forwards to LiteLLM.
        location = /api/models {
            proxy_pass http://access-control-service:9096;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /api/chat/ {
            proxy_pass http://access-control-service:9096;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /api/agents {
            proxy_pass http://agent-service:3001;
            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_read_timeout 1d;
            proxy_send_timeout 1d;
        }

        location /api/ {
            proxy_pass http://dashboard-service:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        location /wsapi/ {
            proxy_pass http://workflow-runtime-coordinator-service:8085;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }

        # Fallback for all other routes
        location / {
            proxy_pass http://dashboard-service:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}
