package com.reading.platform.common.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 限流配置属性
 * 支持通过配置文件配置全局限流规则
 */
@Data
@Component
@ConfigurationProperties(prefix = "rate-limit")
public class RateLimitProperties {

    /**
     * 是否启用限流
     * 默认启用
     */
    private boolean enabled = true;

    /**
     * 默认时间窗口大小（秒）
     */
    private long defaultTimeWindow = 60;

    /**
     * 默认时间窗口内最大请求数
     */
    private long defaultMaxRequests = 1000;

    /**
     * 限流规则列表
     */
    private List<RateLimitRule> rules;

    /**
     * 排除限流的接口路径
     */
    private List<String> excludePatterns;

    /**
     * 限流规则
     */
    @Data
    public static class RateLimitRule {
        /**
         * 接口路径_pattern（支持 Ant 风格通配符）
         */
        private String pattern;

        /**
         * 时间窗口大小
         */
        private long timeWindow = 60;

        /**
         * 时间窗口内最大请求数
         */
        private long maxRequests = 100;
    }
}
