package controllers

import (
	"encoding/json"
	"eta/eta_api/models"
	"eta/eta_api/models/data_manage/request"
	"eta/eta_api/utils"
	"fmt"
	"github.com/tealeg/xlsx"
	"os"
	"path/filepath"
	"time"
)

// MeetingProbabilitiesController 加息概率
type MeetingProbabilitiesController struct {
	BaseAuthController
}

// Detail
// @Title 获取表格详情
// @Description 获取表格详情接口
// @Param   ExcelInfoId   query   int  true       "表格id"
// @Success 200 {object} data_manage.ExcelInfo
// @router /detail [get]
func (c *MeetingProbabilitiesController) Detail() {
	br := new(models.BaseResponse).Init()
	defer func() {
		c.Data["json"] = br
		c.ServeJSON()
	}()
	sysUser := c.SysUser
	if sysUser == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录,SysUser Is Empty"
		br.Ret = 408
		return
	}

	date := c.GetString("DateTime")
	isExport, _ := c.GetInt("IsExport")

	// 获取数据详情bu
	excelDetail, err := models.GetMeetingInfoById(date)
	if err != nil {
		if err.Error() == utils.ErrNoRow() {
			br.Ret = 200
			br.Msg = "该日期无数据"
			br.Msg = "该日期无数据,Err:" + err.Error()
			return
		}
		br.ErrMsg = err.Error()
		return
	}

	if isExport == 1 {
		sheet := new(request.ISheet)
		err = json.Unmarshal([]byte(excelDetail.Content), &sheet)

		MeetingProbabilitiesExport(c,br,sheet)
		return
	}


	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = excelDetail
}

// MeetingProbabilitiesExport 导出Excel
func MeetingProbabilitiesExport(this *MeetingProbabilitiesController, br *models.BaseResponse, sheetReq *request.ISheet) {
	sysUser := this.SysUser
	if sysUser == nil {
		br.Msg = "请重新登录"
		return
	}

	dir, _ := os.Executable()
	exPath := filepath.Dir(dir)
	downloadPath := exPath + "/" + time.Now().Format(utils.FormatDateTimeUnSpace) + ".xlsx"
	xlsxFile := xlsx.NewFile()
	sheet, e := xlsxFile.AddSheet("数据报表")
	if e != nil {
		br.Msg = "新增Sheet失败"
		br.ErrMsg = "新增Sheet失败, Err: " + e.Error()
		return
	}


	for _, v := range sheetReq.Data {
		addRow := sheet.AddRow()
		for _, s := range v {
			if s != nil {
				addRow.AddCell().SetString(s.M)
			}
		}
	}

	if e = xlsxFile.Save(downloadPath); e != nil {
		br.Msg = "导出失败"
		br.ErrMsg = "保存文件失败"
		return
	}
	fileName := fmt.Sprint("MeetingProbabilities", time.Now().Format("2006.01.02"), ".xlsx")
	this.Ctx.Output.Download(downloadPath, fileName)
	defer func() {
		_ = os.Remove(downloadPath)
	}()
	br.Ret = 200
	br.Success = true
	br.Msg = "success"
}