package v1

import (
	"github.com/gin-gonic/gin"
	"pure-admin/model"
	"pure-admin/model/request"
	"pure-admin/model/response"
	"pure-admin/service"
)

// @Summary 用户账单数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} response.BillData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/customer-data [get]
func GetUserBillData(c *gin.Context) {
	var (
		err    error
		params request.BillSearch
		result response.BillData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetBillData("customer", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 用户账单列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} []model.BillList "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/customer-list [get]
func GetUserBillList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.BillSearch
		result []model.BillList
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetBillList("customer", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

// @Summary 网红提现数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.WithdrawalSearch false "data..."
// @Success 200 {object} response.InfluenceWithdrawalData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/influence-data [get]
func GetInfluenceWithdrawalData(c *gin.Context) {
	var (
		err    error
		params request.WithdrawalSearch
		result response.InfluenceWithdrawalData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetInfluenceWithdrawalData(&params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 网红提现列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.WithdrawalSearch false "data..."
// @Success 200 {object} []model.Withdrawal "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/influence-list [get]
func GetInfluenceWithdrawalList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.WithdrawalSearch
		result []model.Withdrawal
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetWithdrawalList("1", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

func ExamineInfluenceWithdrawal(c *gin.Context) {
	//var (
	//	err    error
	//	params request.ExamineWithdrawal
	//)
	//_ = c.ShouldBindJSON(&params)
	//err = service.ExamineWithdrawal("1", &params)
	//if err != nil {
	//	response.FailWithMessage(err.Error(), c)
	//	return
	//}
	response.OkWithMessage("提交成功", c)
}

// @Summary 手动提现打款状态
// @Security Bearer
// @Description
// @Tags bill
// @Param data body request.TransferResult false "data..."
// @Success 200 {string} string "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/status [put]
func UpdateWithdrawalStatus(c *gin.Context) {
	var (
		err    error
		params request.TransferResult
	)
	_ = c.ShouldBindJSON(&params)
	err = service.UpdateWithdrawalStatus(&params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithMessage("操作成功", c)
}

func TransferWithdrawalRetry(c *gin.Context) {
	var (
	//err    error
	//params request.RetryWithdrawal
	)
	//_ = c.ShouldBindJSON(&params)
	//err = service.TransferWithdrawalRetry("1", &params)
	//if err != nil {
	//	response.FailWithMessage(err.Error(), c)
	//	return
	//}
	response.OkWithMessage("操作成功", c)
}

// @Summary 网红账单数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} response.BillData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/influence-data [get]
func GetInfluenceBillData(c *gin.Context) {
	var (
		err    error
		params request.BillSearch
		result response.BillData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetBillData("influencer", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 网红账单列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} []model.BillList "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/influence-list [get]
func GetInfluenceBillList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.BillSearch
		result []model.BillList
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetBillList("influencer", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

// @Summary 商家提现数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.WithdrawalSearch false "data..."
// @Success 200 {object} response.SellerWithdrawalData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/seller-data [get]
func GetSellerWithdrawalData(c *gin.Context) {
	var (
		err    error
		params request.WithdrawalSearch
		result response.SellerWithdrawalData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetSellerWithdrawalData(&params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 商家提现列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.WithdrawalSearch false "data..."
// @Success 200 {object} []model.Withdrawal "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/seller-list [get]
func GetSellerWithdrawalList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.WithdrawalSearch
		result []model.Withdrawal
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetWithdrawalList("2", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

// @Summary 商家提现审核
// @Security Bearer
// @Description
// @Tags bill
// @Param data body request.ExamineWithdrawal false "data..."
// @Success 200 {string} string "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/seller-examine [post]
func ExamineSellerWithdrawal(c *gin.Context) {
	//var (
	//	err    error
	//	params request.ExamineWithdrawal
	//)
	//_ = c.ShouldBindJSON(&params)
	//err = service.ExamineWithdrawal("2", &params)
	//if err != nil {
	//	response.FailWithMessage(err.Error(), c)
	//	return
	//}
	response.OkWithMessage("操作成功", c)
}

// @Summary 商家账单数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} response.BillData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/seller-data [get]
func GetSellerBillData(c *gin.Context) {
	var (
		err    error
		params request.BillSearch
		result response.BillData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetBillData("seller", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 商家账单列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} []model.BillList "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/seller-list [get]
func GetSellerBillList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.BillSearch
		result []model.BillList
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetBillList("seller", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

// @Summary 商家营销账户数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillFundSearch false "data..."
// @Success 200 {object} response.SellerFundData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/seller-fund-data [get]
func GetSellerFundData(c *gin.Context) {
	var (
		err    error
		params request.BillFundSearch
		result response.SellerFundData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetSellerFundData(&params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 商家营销账户记录列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillFundSearch false "data..."
// @Success 200 {array} model.SellerBillFund "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/seller-fund-list [get]
func GetSellerFundList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.BillFundSearch
		result []model.SellerBillFund
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetSellerFundList("seller", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

// @Summary 平台提现数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.WithdrawalSearch false "data..."
// @Success 200 {object} response.BkbData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/admin-data [get]
func GetAdminWithdrawalData(c *gin.Context) {
	var (
		err    error
		params request.WithdrawalSearch
		result response.BkbData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetBkbWithdrawalData(&params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 平台提现列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.WithdrawalSearch false "data..."
// @Success 200 {object} []model.Withdrawal "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /withdrawal/admin-list [get]
func GetAdminWithdrawalList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.WithdrawalSearch
		result []model.Withdrawal
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetWithdrawalList("", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

// @Summary 平台账单数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} response.BillData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/admin-data [get]
func GetAdminBillData(c *gin.Context) {
	var (
		err    error
		params request.BillSearch
		result response.BillData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetBillData("", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 平台账单列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillSearch false "data..."
// @Success 200 {object} []model.BillList "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/admin-list [get]
func GetAdminBillList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.BillSearch
		result []model.BillList
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetBillList("", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}

// @Summary 平台奖励账户数据
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillFundSearch false "data..."
// @Success 200 {object} response.AdminFundData "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/admin-fund-data [get]
func GetAdminFundData(c *gin.Context) {
	var (
		err    error
		params request.BillFundSearch
		result response.AdminFundData
	)
	_ = c.ShouldBindQuery(&params)
	err, result = service.GetBkbFundData(&params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(result, "获取成功", c)
}

// @Summary 平台奖励账户列表
// @Security Bearer
// @Description
// @Tags bill
// @Param data query request.BillFundSearch false "data..."
// @Success 200 {array} model.AdminBillFund "{"code": 0, "data": [...]}"
// @Success 201 {string} string "{"code": 1, "message": ""}"
// @Router /bill/admin-fund-list [get]
func GetAdminFundList(c *gin.Context) {
	var (
		err    error
		total  int64
		params request.BillFundSearch
		result []model.AdminBillFund
	)
	_ = c.ShouldBindQuery(&params)
	err, result, total = service.GetBkbFundList("bkb", &params)
	if err != nil {
		response.FailWithMessage(err.Error(), c)
		return
	}
	response.OkWithDetailed(response.PageResult{
		List:     result,
		Total:    total,
		Page:     params.Page,
		PageSize: params.PageSize,
	}, "获取成功", c)
}