package com.tourism.common.huaweicloud.obs.config;

import com.obs.services.ObsClient;
import com.tourism.common.huaweicloud.obs.wrapper.HuaweicloudObsTemplate;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;

/**
 * common-huaweicloud-obs块的自动配置引导类。仅当配置项huaweicloud.obs.enabled为true的时候加载。
 *
 * @author 吃饭睡觉
 * @date 2024-09-06
 */
@EnableConfigurationProperties(HuaweicloudObsProperties.class)
@ConditionalOnProperty(prefix = "huaweicloud.obs", name = "enabled")
public class HuaweicloudObsAutoConfiguration {

    /**
     * 将华为云OBS原生的客户端类封装成bean对象，便于集成，同时也可以灵活使用客户端的所有功能。
     *
     * @param p 属性配置对象。
     * @return 华为云OBS的原生客户端对象。
     */
    @Bean
    @ConditionalOnMissingBean
    public ObsClient obsClient(HuaweicloudObsProperties p) {
        ObsClient client = new ObsClient(p.getAccessKey(), p.getSecretKey(), p.getEndpoint());
        if (!client.headBucket(p.getBucketName())) {
            client.createBucket(p.getBucketName());
        }
        return client;
    }

    /**
     * 封装的华为云OBS模板类。
     *
     * @param p 属性配置对象。
     * @param c 华为云OBS的原生客户端bean对象。
     * @return 华为云OBS模板的bean对象。
     */
    @Bean
    @ConditionalOnMissingBean
    public HuaweicloudObsTemplate huaweicloudObsTemplate(HuaweicloudObsProperties p, ObsClient c) {
        return new HuaweicloudObsTemplate(p, c);
    }
}