package minio

import (
	"context"
	"gitee.ltd/lxh/wechat-robot/internal/config"
	"github.com/gofiber/fiber/v2/log"
	"github.com/minio/minio-go/v7"
	"github.com/minio/minio-go/v7/pkg/credentials"
)

var minioClient *minio.Client

// Init
// @description: 初始化Minio连接
func Init() {
	cfg, err := config.Load()
	if err != nil {
		log.Panicf("加载配置失败: %s", err.Error())
		return
	}

	ctx := context.Background()
	// 初使化 minio client对象。
	minioClient, err = minio.New(cfg.Minio.Endpoint, &minio.Options{
		Creds:  credentials.NewStaticV4(cfg.Minio.AccessKeyID, cfg.Minio.SecretAccessKey, ""),
		Secure: cfg.Minio.UseSsl,
	})
	if err != nil {
		log.Panicf("OSS初始化失败: %v", err.Error())
	}
	log.Debug("OSS连接成功，开始判断桶是否存在")
	// 判断捅是否存在，不存在就创建
	var exists bool
	exists, err = minioClient.BucketExists(ctx, cfg.Minio.BucketName)
	if err != nil {
		log.Panicf("判断桶失败: %v", err)
	}
	if !exists {
		log.Debug("桶不存在，开始创建")
		// 创建桶
		err = minioClient.MakeBucket(ctx, cfg.Minio.BucketName, minio.MakeBucketOptions{Region: "us-east-1"})
		if err != nil {
			log.Panicf("OSS桶创建失败: %v", err.Error())
		}
		log.Debug("桶创建成功")
	} else {
		log.Debug("桶已存在")
	}
	log.Info("OSS初始化成功")
}
