package com.cico.nest.lcdp.boot.web.errorcode.config;

import com.cico.nest.lcdp.boot.api.system.errorcode.ErrorCodeApi;
import com.cico.nest.lcdp.boot.web.errorcode.core.generator.ErrorCodeAutoGenerator;
import com.cico.nest.lcdp.boot.web.errorcode.core.generator.ErrorCodeAutoGeneratorImpl;
import com.cico.nest.lcdp.boot.web.errorcode.core.loader.ErrorCodeLoader;
import com.cico.nest.lcdp.boot.web.errorcode.core.loader.ErrorCodeLoaderImpl;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.scheduling.annotation.EnableScheduling;

/**
 * 错误码配置类
 *
 * @author zws
 */
@AutoConfiguration
@ConditionalOnProperty(prefix = "lcdp.error-code", value = "enable", matchIfMissing = true) // 允许使用 fbi.error-code.enable=false 禁用访问日志
@EnableConfigurationProperties(ErrorCodeProperties.class)
@EnableScheduling // 开启调度任务的功能，因为 ErrorCodeRemoteLoader 通过定时刷新错误码
public class LcdpErrorCodeAutoConfiguration {

    @Bean
    public ErrorCodeAutoGenerator errorCodeAutoGenerator(@Value("${spring.application.name}") String applicationName,
                                                         ErrorCodeProperties errorCodeProperties,
                                                         ErrorCodeApi errorCodeApi) {
        return new ErrorCodeAutoGeneratorImpl(applicationName, errorCodeProperties.getConstantsClassList(), errorCodeApi);
    }

    @Bean
    public ErrorCodeLoader errorCodeLoader(@Value("${spring.application.name}") String applicationName,
                                           ErrorCodeApi errorCodeApi) {
        return new ErrorCodeLoaderImpl(applicationName, errorCodeApi);
    }

}
