package com.zt.plat.module.base.framework.sync.config;

import com.zt.plat.module.base.framework.sync.constant.MasterDataSyncConstants;
import jakarta.validation.constraints.Min;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.validation.annotation.Validated;

import java.time.Duration;
import java.util.HashMap;
import java.util.Map;

/**
 * 主数据同步管道的配置项。
 */
@Data
@Validated
@ConfigurationProperties(prefix = "base.master-data-sync")
public class MasterDataSyncProperties {

    /**
     * 是否允许运行主数据同步。
     */
    private boolean enabled = true;

    /**
     * 从外部数据源读取时的默认批量大小。
     */
    @Min(1)
    private int batchSize = 500;

    /**
     * 指向外部 MDM MySQL 的动态数据源名称。
     */
    private String sourceDatasourceName = MasterDataSyncConstants.DEFAULT_SOURCE_DATASOURCE;

    /**
     * 成功是否进行回调通知。
     */
    private boolean notifyOnSuccess = true;

    /**
     * 失败是否进行回调通知。
     */
    private boolean notifyOnFailure = true;

    /**
     * 可选的回调地址，用于推送同步结果。
     */
    private String callbackUrl;

    /**
     * 回调请求需要附加的静态请求头。
     */
    private Map<String, String> callbackHeaders = new HashMap<>();

    /**
     * HTTP 客户端的超时时间等参数。
     */
    private final HttpProperties http = new HttpProperties();

    @Data
    public static class HttpProperties {
        private Duration connectTimeout = Duration.ofSeconds(5);
        private Duration readTimeout = Duration.ofSeconds(30);
        private Duration writeTimeout = Duration.ofSeconds(30);
    }
}
