package tech.easyflow.log.reporter;

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

import java.util.Arrays;
import java.util.List;

/**
 * Action 请求与响应日志采集配置。
 */
@Component
@ConfigurationProperties(prefix = "easyflow.log.reporter")
public class ActionLogReporterProperties {

    /**
     * 是否启用 Action 报告
     */
    private boolean enabled = true;

    /**
     * 采样率（0.0 ~ 1.0），1.0 = 100%
     */
    private double sampleRate = 1.0;

    /**
     * 包含的路径模式
     */
    private List<String> includePatterns = Arrays.asList("/**");

    /**
     * 排除的路径模式
     */
    private List<String> excludePatterns = Arrays.asList(
            "/static/**",
            "/assets/**",
            "/js/**",
            "/css/**",
            "/images/**",
            "/favicon.ico",
            "/api/v1/agent/media/**",
            "/actuator/**",
            "*.js",
            "*.css",
            "*.png",
            "*.jpg",
            "*.gif",
            "*.ico"
    );


    /**
     * 判断 Action 报告是否启用。
     *
     * @return 是否启用
     */
    public boolean isEnabled() {
        return enabled;
    }

    /**
     * 设置 Action 报告开关。
     *
     * @param enabled 是否启用
     */
    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    /**
     * 获取日志采样率。
     *
     * @return 采样率
     */
    public double getSampleRate() {
        return sampleRate;
    }

    /**
     * 设置日志采样率。
     *
     * @param sampleRate 采样率
     */
    public void setSampleRate(double sampleRate) {
        this.sampleRate = sampleRate;
    }

    /**
     * 获取需要采集的路径模式。
     *
     * @return 包含路径模式
     */
    public List<String> getIncludePatterns() {
        return includePatterns;
    }

    /**
     * 设置需要采集的路径模式。
     *
     * @param includePatterns 包含路径模式
     */
    public void setIncludePatterns(List<String> includePatterns) {
        this.includePatterns = includePatterns;
    }

    /**
     * 获取禁止缓存正文的路径模式。
     *
     * @return 排除路径模式
     */
    public List<String> getExcludePatterns() {
        return excludePatterns;
    }

    /**
     * 设置禁止缓存正文的路径模式。
     *
     * @param excludePatterns 排除路径模式
     */
    public void setExcludePatterns(List<String> excludePatterns) {
        this.excludePatterns = excludePatterns;
    }
}
