spring:
  # Gateway 配置
  cloud:
    gateway:
      # 路由配置
      routes:
        # ========== v1 版本路由（新规范）==========
        # 管理后台 - v1 - 会员服务
        - id: admin-v1-member-service
          uri: lb://xdz-user # 使用 Nacos 服务发现，服务名：xdz-user
          predicates:
            - Path=/api/v1/admin/member/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/member/...

        # 管理后台 - v1 - 车辆服务
        - id: admin-v1-vehicle-service
          uri: lb://xdz-vehicle # 使用 Nacos 服务发现，服务名：xdz-vehicle
          predicates:
            - Path=/api/v1/admin/vehicle/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/vehicle/...

        # 管理后台 - v1 - 服务管理（通过业务服务代理）
        - id: admin-v1-service-management
          uri: lb://xdz-business # 使用 Nacos 服务发现，服务名：xdz-business
          predicates:
            - Path=/api/v1/admin/service/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/service/...

        # 管理后台 - v1 - 权限服务（角色）- 转发到 user-server
        # 注意：此路由必须在系统服务路由之前，确保更具体的路径优先匹配
        - id: admin-v1-role-service
          uri: lb://xdz-user # 使用 Nacos 服务发现，服务名：xdz-user
          predicates:
            - Path=/api/v1/admin/system/role/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/role/...
          order: -1  # 设置更小的数字，确保在系统服务路由（order: 0）之前匹配

        # 管理后台 - v1 - 权限服务（菜单）- 转发到 user-server
        - id: admin-v1-menu-service
          uri: lb://xdz-user # 使用 Nacos 服务发现，服务名：xdz-user
          predicates:
            - Path=/api/v1/admin/system/menu/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/menu/...
          order: -1  # 设置更小的数字，确保在系统服务路由（order: 0）之前匹配

        # 管理后台 - v1 - 权限服务（权限）- 转发到 user-server
        - id: admin-v1-permission-service
          uri: lb://xdz-user # 使用 Nacos 服务发现，服务名：xdz-user
          predicates:
            - Path=/api/v1/admin/system/permission/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/permission/...
          order: -1  # 设置更小的数字，确保在系统服务路由（order: 0）之前匹配

        # 管理后台 - v1 - 系统服务（其他系统接口）
        - id: admin-v1-system-service
          uri: lb://xdz-business # 使用 Nacos 服务发现，服务名：xdz-business
          predicates:
            - Path=/api/v1/admin/system/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/system/...
          order: 0  # 默认优先级，低于权限服务路由

        # 管理后台 - v1 - 默认路由
        - id: admin-v1-default-service
          uri: lb://xdz-business # 使用 Nacos 服务发现，服务名：xdz-business
          predicates:
            - Path=/api/v1/admin/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /admin/...

        # APP端 - v1 - 会员服务
        - id: app-v1-member-service
          uri: lb://xdz-user # 使用 Nacos 服务发现，服务名：xdz-user
          predicates:
            - Path=/api/v1/app/member/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /app/member/...

        # APP端 - v1 - 社区服务
        - id: app-v1-community-service
          uri: lb://xdz-business # 使用 Nacos 服务发现，服务名：xdz-business
          predicates:
            - Path=/api/v1/app/community/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /app/community/...

        # APP端 - v1 - 默认路由
        - id: app-v1-default-service
          uri: lb://xdz-business # 使用 Nacos 服务发现，服务名：xdz-business
          predicates:
            - Path=/api/v1/app/**
          filters:
            - StripPrefix=2  # 去掉 /api/v1，转发 /app/...

      # 全局 CORS 配置
      globalcors:
        cors-configurations:
          '[/**]':
            # 注意：当 allowCredentials=true 时，不能使用 "*"，必须明确列出允许的源
            # 或者使用 allowedOriginPatterns 支持通配符
            allowedOriginPatterns: 
              - "${PROD_FRONTEND_ORIGIN:https://生产环境前端地址}"  # 生产环境前端地址（支持环境变量）
            allowedMethods: 
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
              - PATCH
            allowedHeaders: "*"
            exposedHeaders: 
              - Authorization
              - Content-Type
            allowCredentials: true
            maxAge: 3600  # 预检请求缓存时间（秒）

    # Nacos 配置（生产环境必须使用 Nacos 服务发现）
    nacos:
      server-addr: ${NACOS_SERVER_ADDR:prod-nacos.example.com:8848} # Nacos 服务器地址（支持环境变量，格式：IP:端口）
      username: ${NACOS_USERNAME:nacos} # Nacos 账号（支持环境变量）
      password: ${NACOS_PASSWORD:nacos} # Nacos 密码（支持环境变量）
      discovery:
        enabled: true  # 启用服务发现
        namespace: prod # 命名空间（生产环境）
        group: DEFAULT_GROUP
      config:
        enabled: false  # Gateway 不使用配置中心
        import-check:
          enabled: false

# 日志配置（生产环境使用 INFO 级别）
logging:
  level:
    root: INFO  # 生产环境使用 INFO 级别
    org.springframework.cloud.gateway: INFO
    com.xindazhou.gateway: INFO

