package admin

import (
	"ulink-admin/frame"
	"ulink-admin/modules/stock/models/model"
	"ulink-admin/modules/stock/models/req"
	"ulink-admin/modules/stock/service"
	"ulink-admin/pkg/excels"
	"ulink-admin/pkg/file"
	"ulink-admin/pkg/page"
)

type StockDetailApi struct {
	stockDetailService service.StockDetailService
}

// List 查询股票明细分页数据
// @Summary 分页查询股票明细数据接口
// @Description 分页查询股票明细数据接口
// @Tags 股票明细相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param object query req.StockDetailQuery false "查询参数"
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=page.Page{list=model.StockDetail},msg=string} "分页获取股票明细列表,返回包括列表,总数,页码,每页数量"
// @Router /stockdetail/page [get]
func (this StockDetailApi) Page(c *frame.Context) {
	query := &req.StockDetailQuery{}
	c.ValidteError(c.ShouldBind(query), query)
	find, i := this.stockDetailService.Page(query)
	c.Ok(page.Page{List: find, Total: i, Size: query.PageSize})
}

// List 查询股票明细所有数据
// @Summary 查询全部数据股票明细数据接口
// @Description 查询全部数据股票明细数据接口
// @Tags 股票明细相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param object query req.StockDetailQuery false "查询参数"
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=model.StockDetail,msg=string} "分页获取股票明细列表,返回包括列表,总数,页码,每页数量"
// @Router /stockdetail/list [get]
func (this StockDetailApi) List(c *frame.Context) {
	query := &req.StockDetailQuery{}
	list := make([]model.StockDetail, 0)
	c.ValidteError(c.ShouldBind(query), query)
	this.stockDetailService.List(query, &list)
	c.Ok(list)
}

// Get 根据股票明细Id获取详细信息
// @Summary 股票明细详情查询接口
// @Description 股票明细详情查询接口
// @Tags 股票明细相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param id query   int true "id" id
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=model.StockDetail,msg=string} "返回股票明细详情查询"
// @Router /stockdetail [get]
func (this StockDetailApi) Get(c *frame.Context) {
	var req struct {
		Id int64 `form:"id" binding:"required"  msg:"id不存在" ` //id
	}
	c.ValidteError(c.ShouldBind(&req), &req)
	c.Ok(this.stockDetailService.Get(req.Id))
}

// Add 新增股票明细
// @Summary 新增股票明细接口
// @Description 新增股票明细接口
// @Tags 股票明细相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param  data body model.StockDetail true "股票明细实体对象"
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /stockdetail/add [post]
func (this StockDetailApi) Add(c *frame.Context) {
	stockDetail := &model.StockDetail{}
	c.ValidteError(c.ShouldBind(stockDetail), stockDetail)
	this.stockDetailService.Insert(stockDetail)
}

// Edit 修改股票明细数据接口
// @Summary 修改股票明细接口
// @Description 新增股票明细接口
// @Tags 股票明细相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param  data body model.StockDetail true "股票明细实体对象"
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /stockdetail/edit [put]
func (this StockDetailApi) Edit(c *frame.Context) {
	stockDetail := &model.StockDetail{}
	c.ValidteError(c.ShouldBind(stockDetail), stockDetail)
	this.stockDetailService.Edit(stockDetail, c.Cols())
}

// Delete 删除股票明细数据
// @Summary 删除股票明细接口
// @Description 删除股票明细接口
// @Tags 股票明细相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param id path   int true "id" id
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /stockdetail [delete]
func (a StockDetailApi) Delete(c *frame.Context) {
	var req struct {
		Ids []int64 `form:"ids" binding:"required"  msg:"ids不存在"` //ids
	}
	c.ValidteError(c.ShouldBind(&req), &req)
	a.stockDetailService.Delete(req.Ids)
}

// Export 导出excel
func (this StockDetailApi) Export(c *frame.Context) {
	query := &req.StockDetailQuery{}
	list := make([]model.StockDetail, 0)
	c.ValidteError(c.ShouldBind(query), query)
	this.stockDetailService.List(query, list)
	excelList := make([]interface{}, 0)
	for _, stockDetail := range list {
		excelList = append(excelList, stockDetail)
	}
	_, files := excels.ExportExcel(excelList, "股票明细数据表")
	file.DownloadExcel(c, files)
}