package controller

import (
	"cold-delivery/common/file_store"
	"cold-delivery/conf"
	"fmt"
	"github.com/gin-gonic/gin"
	"github.com/google/uuid"
	"gogs.baozhida.cn/zoie/OAuth-core/api"
	"os"
	"path/filepath"
	"strings"
	"time"
)

type UploadController struct {
	api.Api
}

// FilesUpload 文件上传
// @Summary 文件上传
// @Description 文件上传
// @Tags 工具
// @Success 200 {object} response.Response{data=string,id=string,msg=string} "{"code": 200, "data": [...]}"
// @Router /api/upload [get]
func (e UploadController) FilesUpload(c *gin.Context) {
	err := e.MakeContext(c).Errors
	if err != nil {
		e.Error(500, err, "服务初始化失败！")
		return
	}

	// 处理文件上传逻辑
	file, err := c.FormFile("file")
	if err != nil {
		c.JSON(400, gin.H{"error": "获取文件失败！"})
		return
	}
	uploadFileName := file.Filename          // 获取文件名
	fileType := filepath.Ext(uploadFileName) // 获取文件类型（扩展名）
	if err != nil {
		c.JSON(400, gin.H{"error": err.Error()})
		return
	}
	filePath := file_store.GetCurrentDirectory() + "/uploads/" + uploadFileName
	err = c.SaveUploadedFile(file, filePath)
	if err != nil {
		c.JSON(400, gin.H{"error": err.Error()})
		return
	}

	defer func() {
		os.Remove(filePath)
	}()

	filename := fmt.Sprintf("%s/%s%s", time.Now().Format("2006-01-02"), strings.Replace(uuid.New().String(), "-", "", -1), fileType)

	err = file_store.QiniuFileStore.UpLoad(filename, filePath)
	if err != nil {
		c.JSON(400, gin.H{"error": "文件上传失败"})
		return
	}

	e.Custom(gin.H{
		"code": 200,
		"data": conf.ExtConfig.Qiniu.Endpoint + filename,
		"msg":  "success",
	})
}

// ApkUpload 文件上传
// @Summary 文件上传
// @Description 文件上传
// @Tags 工具
// @Success 200 {object} response.Response{data=string,id=string,msg=string} "{"code": 200, "data": [...]}"
// @Router /api/apk-upload [get]
func (e UploadController) ApkUpload(c *gin.Context) {
	err := e.MakeContext(c).Errors
	if err != nil {
		e.Error(500, err, "服务初始化失败！")
		return
	}

	// 处理文件上传逻辑
	file, err := c.FormFile("file")
	uploadFileName := file.Filename          // 获取文件名
	fileType := filepath.Ext(uploadFileName) // 获取文件类型（扩展名）
	if err != nil {
		c.JSON(500, gin.H{"error": err.Error()})
		return
	}
	if fileType != ".apk" {
		c.JSON(500, gin.H{"code": 200,
			"data": conf.ExtConfig.Apk.Path + "/" + uploadFileName,
			"msg":  "success"})
		return
	}
	filePath := conf.ExtConfig.Apk.Path + "/" + uploadFileName
	err = c.SaveUploadedFile(file, filePath)
	if err != nil {
		c.JSON(500, gin.H{"error": err.Error()})
		return
	}

	e.Custom(gin.H{
		"code": 200,
		"data": conf.ExtConfig.Apk.Path + "/" + uploadFileName,
		"msg":  "success",
	})
}
