package com.zhentao.util;

import io.minio.GetPresignedObjectUrlArgs;
import io.minio.MinioClient;
import io.minio.http.Method;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeUnit;

/**
 * MinIO工具类
 */
@Slf4j
@Component
public class MinioUtil {
    
    @Autowired
    private MinioClient minioClient;
    
    @Autowired
    private com.zhentao.config.MinioConfig minioConfig;
    
    /**
     * 获取红娘头像的访问URL
     * 
     * @param matchmakerId 红娘ID
     * @param fileName 文件名（例如：红娘1.jpg）
     * @return 可访问的URL，如果文件不存在则返回默认头像
     */
    public String getMatchmakerAvatarUrl(Integer matchmakerId, String fileName) {
        try {
            // 构建对象路径：红娘/红娘1.jpg
            String objectName = minioConfig.getAvatarFolder() + "/" + fileName;
            
            // 生成预签名URL（7天有效期）
            String url = minioClient.getPresignedObjectUrl(
                    GetPresignedObjectUrlArgs.builder()
                            .method(Method.GET)
                            .bucket(minioConfig.getBucketName())
                            .object(objectName)
                            .expiry(7, TimeUnit.DAYS)
                            .build()
            );
            
            log.debug("生成MinIO头像URL: matchmakerId={}, url={}", matchmakerId, url);
            return url;
            
        } catch (Exception e) {
            log.warn("获取红娘头像失败: matchmakerId={}, fileName={}, error={}", 
                    matchmakerId, fileName, e.getMessage());
            // 返回默认头像
            return getDefaultAvatar();
        }
    }
    
    /**
     * 根据红娘ID获取头像URL（自动匹配文件扩展名）
     * 
     * @param matchmakerId 红娘ID
     * @return 头像URL
     */
    public String getMatchmakerAvatarUrlById(Integer matchmakerId) {
        // 尝试常见的图片扩展名
        String[] extensions = {".jpg", ".jpeg", ".png", ".gif"};
        
        for (String ext : extensions) {
            String fileName = "红娘" + matchmakerId + ext;
            try {
                String objectName = minioConfig.getAvatarFolder() + "/" + fileName;
                
                // 检查文件是否存在
                minioClient.statObject(
                        io.minio.StatObjectArgs.builder()
                                .bucket(minioConfig.getBucketName())
                                .object(objectName)
                                .build()
                );
                
                // 文件存在，生成URL
                return getMatchmakerAvatarUrl(matchmakerId, fileName);
                
            } catch (Exception e) {
                // 文件不存在，尝试下一个扩展名
                continue;
            }
        }
        
        // 所有扩展名都尝试失败，返回默认头像
        log.info("红娘头像不存在，使用默认头像: matchmakerId={}", matchmakerId);
        return getDefaultAvatar();
    }
    
    /**
     * 获取默认头像URL
     * 
     * @return 默认头像URL
     */
    public String getDefaultAvatar() {
        return "https://via.placeholder.com/200x200.png?text=默认头像";
    }
    
    /**
     * 获取公共访问URL（不使用预签名）
     * 注意：需要MinIO桶设置为公共访问
     * 
     * @param matchmakerId 红娘ID
     * @param fileName 文件名
     * @return 公共访问URL
     */
    public String getPublicUrl(Integer matchmakerId, String fileName) {
        try {
            // URL编码处理中文路径
            String encodedFolder = URLEncoder.encode(minioConfig.getAvatarFolder(), StandardCharsets.UTF_8.toString());
            String encodedFileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
            
            return String.format("%s/%s/%s/%s", 
                    minioConfig.getEndpoint(),
                    minioConfig.getBucketName(),
                    encodedFolder,
                    encodedFileName);
        } catch (Exception e) {
            log.error("生成公共URL失败: matchmakerId={}, fileName={}", matchmakerId, fileName, e);
            return getDefaultAvatar();
        }
    }
}

