package com.rj.config;

import io.minio.MinioClient;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.StringUtils;

/**
 * MinIO 配置类
 * 
 * @author rj
 * @date 2025-10-02
 */
@Data
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinIOConfig {

    /**
     * MinIO服务器地址
     */
    private String endpoint;

    /**
     * 访问密钥
     */
    private String accessKey;

    /**
     * 秘密密钥
     */
    private String secretKey;

    /**
     * 默认存储桶名称
     */
    private String bucketName;


    /**
     * 创建MinIO客户端Bean
     */
    @Bean
    public MinioClient minioClient() {
        // 验证必要的配置项
        if (!StringUtils.hasText(endpoint)) {
            throw new IllegalArgumentException("MinIO endpoint 配置不能为空，请在配置文件中设置 minio.endpoint");
        }
        if (!StringUtils.hasText(accessKey)) {
            throw new IllegalArgumentException("MinIO accessKey 配置不能为空，请在配置文件中设置 minio.access-key");
        }
        if (!StringUtils.hasText(secretKey)) {
            throw new IllegalArgumentException("MinIO secretKey 配置不能为空，请在配置文件中设置 minio.secret-key");
        }
        if (!StringUtils.hasText(bucketName)) {
            throw new IllegalArgumentException("MinIO bucketName 配置不能为空，请在配置文件中设置 minio.bucket-name");
        }

        return MinioClient.builder()
                .endpoint(endpoint)
                .credentials(accessKey, secretKey)
                .build();
    }

    /**
     * 获取文件访问URL前缀
     */
    public String getFileUrlPrefix() {
        return endpoint + "/" + bucketName + "/";
    }
}
