package app

import (
	"errors"
	"mime/multipart"
	"strings"

	"git.echol.cn/loser/st/server/global"
	"git.echol.cn/loser/st/server/utils/upload"
	"go.uber.org/zap"
)

type UploadService struct{}

// UploadImage 上传图片到 OSS
// 返回图片的访问 URL
func (s *UploadService) UploadImage(header *multipart.FileHeader) (string, error) {
	// 验证文件类型
	if !isImageFile(header.Filename) {
		return "", errors.New("只支持图片格式：jpg, jpeg, png, gif, webp")
	}

	// 验证文件大小（限制 10MB）
	if header.Size > 10*1024*1024 {
		return "", errors.New("图片大小不能超过 10MB")
	}

	// 使用 OSS 上传
	oss := upload.NewOss()
	filePath, _, uploadErr := oss.UploadFile(header)
	if uploadErr != nil {
		global.GVA_LOG.Error("图片上传失败", zap.Error(uploadErr))
		return "", errors.New("图片上传失败")
	}

	return filePath, nil
}

// isImageFile 检查是否为图片文件
func isImageFile(filename string) bool {
	ext := strings.ToLower(filename[strings.LastIndex(filename, ".")+1:])
	imageExts := []string{"jpg", "jpeg", "png", "gif", "webp"}
	for _, validExt := range imageExts {
		if ext == validExt {
			return true
		}
	}
	return false
}
