package controller

import (
	"github.com/gin-gonic/gin"
	"strconv"
	"strings"
	"trading-go/model"
	"trading-go/response"
	"trading-go/util"
)

// Upload
// @Tags 图片模块
// @Summary 上传图片
// @Accept multipart/form-data
// @Produce application/json
// @Param pic formData file true "图片"
// @Success 200 {object} response.Response
// @Router /pic/upload [post]
func Upload(c *gin.Context) {
	var pic model.Pic
	file, err := c.FormFile("pic")
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	suffixs := strings.Split(file.Filename, ".")
	suffix := suffixs[len(suffixs)-1]
	err = util.CheckImg(suffix)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 400)
		return
	}

	path := util.MakePath(file.Filename)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	err = c.SaveUploadedFile(file, "."+path)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	url := "http://" + c.Request.Host + path
	pic.Name = file.Filename
	pic.Url = url
	err = pic.Save()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", pic)
}

// GetAllPic
// @Tags 图片模块
// @Summary 获取所有图片
// @Produce application/json
// @Success 200 {object} response.Response
// @Router /pic [get]
func GetAllPic(c *gin.Context) {
	var pic model.Pic
	pics, err := pic.GetAll()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", pics)
}

// DPic
// @Tags 图片模块
// @Summary 删除图片
// @Produce application/json
// @Param id path uint true "图片id"
// @Success 200 {object} response.Response
// @Router /pic/delete/{id} [delete]
func DPic(c *gin.Context) {
	var pic model.Pic
	ids := c.Param("id")
	id, err := strconv.Atoi(ids)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	pic.Id = uint(id)
	err = pic.Delete()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	response.Success(c.Writer, "success", nil)
}

// GetPicPaged
// @Tags 图片模块
// @Summary 分页获取图片
// @Produce application/json
// @Param page path int true "页数"
// @Param pageSize path int true "一页的大小"
// @Success 200 {object} response.Response
// @Router /pic/{page}/{pageSize} [get]
func GetPicPaged(c *gin.Context) {
	var pic model.Pic
	p := c.Param("page")
	pS := c.Param("pageSize")
	page, err := strconv.Atoi(p)
	pageSize, err := strconv.Atoi(pS)
	if err != nil {
		response.Fail(c.Writer, err.Error(), 500)
		return
	}
	rsp, err := pic.GetPaged(page, pageSize)
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	cnt, err := pic.GetCnt()
	if err != nil {
		msg := err.Error()
		response.Fail(c.Writer, msg, 500)
		return
	}
	if cnt > page*pageSize {
		rsp.HNext = true
	}
	response.Success(c.Writer, "success", rsp)
}