package client

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

type SmsApi struct {
	SmsService *service.SmsService `inject:""`
}

// List 查询短信管理分页数据
// @Summary 分页查询短信管理数据接口
// @Description 分页查询短信管理数据接口
// @Tags 短信管理相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param object query req.SmsQuery false "查询参数"
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=page.Page{list=model.Sms},msg=string} "分页获取短信管理列表,返回包括列表,总数,页码,每页数量"
// @Router /sms/page [get]
func (this SmsApi) Page(c *frame.Context) {
	query := &req.SmsQuery{}
	c.ValidteError(c.ShouldBind(query), query)
	list := make([]response.SmsResponse, 0)
	i := this.SmsService.Page(query, &list)
	c.Ok(page.Page{List: list, 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.SmsQuery false "查询参数"
// @Security ApiKeyAuth
// @Success 200 {object} resp.Response{data=model.Sms,msg=string} "分页获取短信管理列表,返回包括列表,总数,页码,每页数量"
// @Router /sms/list [get]
func (this SmsApi) List(c *frame.Context) {
	query := &req.SmsQuery{}
	list := make([]response.SmsResponse, 0)
	c.ValidteError(c.ShouldBind(query), query)
	this.SmsService.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.Sms,msg=string} "返回短信管理详情查询"
// @Router /sms [get]
func (this SmsApi) 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.SmsService.Get(req.Id))
}

// 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.Sms,msg=string} "返回短信管理详情查询"
// @Router /sms/code [get]
func (this SmsApi) GetSmsCode(c *frame.Context) {
	var req struct {
		Phone string `form:"phone" binding:"required"  msg:"手机号不存在" ` //id
	}
	c.ValidteError(c.ShouldBind(&req), &req)
	c.Ok(this.SmsService.GetSmsCode(req.Phone))
}

// Add 新增短信管理
// @Summary 新增短信管理接口
// @Description 新增短信管理接口
// @Tags 短信管理相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param  data body model.Sms true "短信管理实体对象"
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /sms/add [post]
func (this SmsApi) Add(c *frame.Context) {
	params, sms := &req.SmsAdd{}, &model.Sms{}
	c.ValidteError(c.ShouldBind(params), params)
	utils.CopyFields(sms, params)
	this.SmsService.Insert(sms)
}

// Edit 修改短信管理数据接口
// @Summary 修改短信管理接口
// @Description 新增短信管理接口
// @Tags 短信管理相关接口
// @Accept application/json
// @Produce application/json
// @Param Authorization header string false "Bearer 令牌"
// @Param  data body model.Sms true "短信管理实体对象"
// @Success 200 {object} resp.Response{msg=string} "操作状态"
// @Router /sms/edit [put]
func (this SmsApi) Edit(c *frame.Context) {
	params, sms := &req.SmsEdit{}, &model.Sms{}
	c.ValidteError(c.ShouldBind(params), params)
	utils.CopyFields(sms, params)
	this.SmsService.Edit(sms, 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 /sms [delete]
func (a SmsApi) Delete(c *frame.Context) {
	var req struct {
		Ids []int64 `form:"ids" binding:"required"  msg:"ids不存在"` //ids
	}
	c.ValidteError(c.ShouldBind(&req), &req)
	a.SmsService.Delete(req.Ids)
}

// Export 导出excel
func (this SmsApi) Export(c *frame.Context) {
	query := &req.SmsQuery{}
	list := make([]model.Sms, 0)
	c.ValidteError(c.ShouldBind(query), query)
	this.SmsService.List(query, list)
	excelList := make([]interface{}, 0)
	for _, sms := range list {
		excelList = append(excelList, sms)
	}
	_, files := excels.ExportExcel(excelList, "短信管理数据表")
	file.DownloadExcel(c, files)
}