package org.xyzh.gateway.config;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @description Gateway 动态路由配置（Java 代码方式）
 * @author yslg
 * @since 2025-12-02
 * 
 * 这是路由配置的第二种方式，与 application.yml 中的配置二选一或配合使用
 * 优点：灵活性更高，可以动态添加/修改路由，支持更复杂的路由逻辑
 */
@Configuration
public class GatewayRouteConfig {

    /**
     * 通过代码方式配置路由（示例，可根据需要启用）
     */
    // @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            // 认证服务路由
            .route("auth-service", r -> r
                .path("/auth/**")
                .filters(f -> f
                    .stripPrefix(1)
                    .addRequestHeader("X-Gateway", "gateway-service")
                )
                .uri("lb://auth-service")
            )
            
            // 系统服务路由
            .route("system-service", r -> r
                .path("/system/**")
                .filters(f -> f
                    .stripPrefix(1)
                    .addRequestHeader("X-Gateway", "gateway-service")
                )
                .uri("lb://system-service")
            )
            
            // 日志服务路由
            .route("log-service", r -> r
                .path("/log/**")
                .filters(f -> f
                    .stripPrefix(1)
                    .addRequestHeader("X-Gateway", "gateway-service")
                )
                .uri("lb://log-service")
            )
            
            // 文件服务路由
            .route("file-service", r -> r
                .path("/file/**")
                .filters(f -> f
                    .stripPrefix(1)
                    .addRequestHeader("X-Gateway", "gateway-service")
                )
                .uri("lb://file-service")
            )
            
            // WebSocket 路由示例
            .route("websocket-route", r -> r
                .path("/ws/**")
                .uri("lb:ws://system-service")
            )
            
            .build();
    }

    /**
     * 动态路由刷新端点（如需要）
     * 可以配合 Nacos 配置中心实现动态路由更新
     */
}
