package com.dora.config;

import com.qcloud.cos.COSClient;
import com.qcloud.cos.model.BucketCrossOriginConfiguration;
import com.qcloud.cos.model.CORSRule;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;

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

/**
 * COS CORS 配置工具（仅在需要时启用）
 * 使用方法：取消 @Component 注释，启动一次应用即可配置 CORS
 */
// @Component  // 需要配置时取消注释
@RequiredArgsConstructor
@Slf4j
public class CosCorsSetter implements CommandLineRunner {

    private final COSClient cosClient;
    private final CosConfig cosConfig;

    @Override
    public void run(String... args) {
        try {
            log.info("开始配置 COS CORS 规则...");
            
            BucketCrossOriginConfiguration bucketCORS = new BucketCrossOriginConfiguration();
            List<CORSRule> corsRules = new ArrayList<>();
            
            CORSRule corsRule = new CORSRule();
            // 允许的来源（可以设置为具体域名或 *）
            corsRule.setAllowedOrigins(Arrays.asList("*"));
            // 允许的 HTTP 方法
            corsRule.setAllowedMethods(Arrays.asList(
                CORSRule.AllowedMethods.GET,
                CORSRule.AllowedMethods.POST,
                CORSRule.AllowedMethods.PUT,
                CORSRule.AllowedMethods.HEAD
            ));
            // 允许的请求头
            corsRule.setAllowedHeaders(Arrays.asList("*"));
            // 暴露的响应头
            corsRule.setExposedHeaders(Arrays.asList("ETag", "Content-Length"));
            // 预检请求缓存时间（秒）
            corsRule.setMaxAgeSeconds(600);
            
            corsRules.add(corsRule);
            bucketCORS.setRules(corsRules);
            
            // 设置 CORS 规则
            cosClient.setBucketCrossOriginConfiguration(cosConfig.getBucketName(), bucketCORS);
            
            log.info("✅ COS CORS 规则配置成功！");
            log.info("存储桶: {}", cosConfig.getBucketName());
            log.info("允许的来源: *");
            log.info("允许的方法: GET, POST, PUT, HEAD");
            
        } catch (Exception e) {
            log.error("❌ 配置 COS CORS 规则失败: {}", e.getMessage(), e);
        }
    }
}
