package models

import (
	"strings"
	"time"
)

const (
	LotteryPrizeOrderStatusAll = 4 // 全部
)

// LotteryPrize 奖品信息表（抽奖）
type LotteryPrize struct {
	Model

	Name             string  `json:"name"`                 // 奖品名称
	PrizeType        int     `json:"prize_type"`           // 奖品类型：1-积分 2-优惠券 3-实物 4-租卡会员兑换码（30天）0-谢谢参与
	PrizeValue       int     `json:"prize_value"`          // 奖品值（积分数或券ID等）
	Level            int     `json:"level"`                // 奖品等级，如1等奖、2等奖等
	Weight           int     `json:"weight"`               // 抽奖权重
	Stock            int     `json:"stock"`                // 剩余库存
	Status           int     `json:"status"`               // 奖品状态：1-启用 2-禁用
	UnlockUserCount  int     `json:"unlock_user_count"`    // 解锁条件：用户个人抽奖次数
	UnlockTotalCount int     `json:"unlock_total_count"`   // 解锁条件：所有用户总抽奖次数
	DailyAmountLimit float64 `json:"daily_amount_limit"`   // 当天消费金额限制（0 表示不限制）
	Images           string  `json:"images"`               // 奖品图片
	Probability      string  `json:"probability" gorm:"-"` // 中奖概率（例如 0.001%）
}

// LotteryRecord 抽奖记录
type LotteryRecord struct {
	Model

	Uid        uint   `json:"uid"`         // 用户ID
	PrizeId    uint   `json:"prize_id"`    // 奖品ID
	PrizeName  string `json:"prize_name"`  // 奖品名称
	PrizeType  int    `json:"prize_type"`  // 奖品类型
	PrizeLevel int    `json:"prize_level"` // 奖品等级
	PrizeValue int    `json:"prize_value"` // 奖品值（积分数或券ID等）
	Status     int    `json:"status"`      // 状态：0-待处理 1-已发放 2-处理中 3-失败
	IsWin      bool   `json:"is_win"`      // 是否中奖（false 表示“谢谢参与”等无奖项）
}

// LotteryPrizeOrder 抽奖奖品订单（包含用户收件信息、物流信息、发货状态）
type LotteryPrizeOrder struct {
	Model

	RecordId  uint   `json:"record_id"`  // 抽奖记录ID
	Uid       uint   `json:"uid"`        // 用户ID
	Tel       string `json:"tel"`        // 用户手机号
	PrizeId   uint   `json:"prize_id"`   // 奖品ID
	PrizeName string `json:"prize_name"` // 奖品名称

	// 用户提交的收货信息
	ReceiverName  string `json:"receiver_name"`  // 收件人
	ReceiverPhone string `json:"receiver_phone"` // 收件人手机号
	ReceiverAddr  string `json:"receiver_addr"`  // 收件地址

	// 发货信息
	LogisticsCompany   string     `json:"logistics_company"`    // 快递公司
	LogisticsNumber    string     `json:"logistics_number"`     // 快递单号
	DeliverShopperCode uint32     `json:"deliver_shopper_code"` // 发货店员用户ID
	DeliverShopperName string     `json:"deliver_shopper_name"` // 发货店员名称
	ShippedAt          *time.Time `json:"shipped_at"`           // 发货时间
	ReceivedAt         *time.Time `json:"received_at"`          // 收货时间

	Status int `json:"status"` // 发货状态：0-待发货 1-已发货 2-已收货 3-取消
}

type UpdateLotteryConfigRequest struct {
	CostPerDraw    uint `json:"cost_per_draw" binding:"required"`
	DailyLimit     uint `json:"daily_limit" binding:"required"`
	LotteryEnabled bool `json:"lottery_enabled"`
}

type CreatePrizeRequest struct {
	Name             string  `json:"name" binding:"required"`       // 奖品名称
	PrizeType        int     `json:"prize_type" binding:"required"` // 奖品类型：1-积分，2-优惠券，3-实物，4-租卡会员兑换码（30天），0-谢谢参与
	PrizeValue       int     `json:"prize_value"`                   // 奖品值：积分数或优惠券ID等
	Level            int     `json:"level"`                         // 奖品等级：如1表示一等奖，2表示二等奖
	Weight           int     `json:"weight" binding:"required"`     // 抽奖权重：数值越大，概率越高
	Stock            int     `json:"stock"`                         // 库存数量：表示奖品剩余可发放数量
	Status           int     `json:"status"`                        // 奖品状态：1-启用，2-禁用
	UnlockUserCount  int     `json:"unlock_user_count"`             // 解锁条件：用户个人累计抽奖次数达到该值后解锁
	UnlockTotalCount int     `json:"unlock_total_count"`            // 解锁条件：平台所有用户累计抽奖次数达到该值后解锁
	DailyAmountLimit float64 `json:"daily_amount_limit"`            // 当天消费金额限制（0 表示不限制）
	Images           string  `json:"images"`                        // 奖品图片
}

type UpdatePrizeRequest struct {
	ID               uint    `json:"id" binding:"required"` // 奖品ID
	Name             string  `json:"name"`                  // 奖品名称
	PrizeType        int     `json:"prize_type"`            // 奖品类型：1-积分，2-优惠券，3-实物，4-租卡会员兑换码（30天），0-谢谢参与
	PrizeValue       int     `json:"prize_value"`           // 奖品值：积分数或优惠券ID等
	Level            int     `json:"level"`                 // 奖品等级：如1表示一等奖
	Weight           int     `json:"weight"`                // 抽奖权重：用于控制中奖概率
	Stock            int     `json:"stock"`                 // 剩余库存
	Status           int     `json:"status"`                // 奖品状态：1-启用，2-禁用
	UnlockUserCount  int     `json:"unlock_user_count"`     // 用户抽奖次数达到该值后解锁该奖品
	UnlockTotalCount int     `json:"unlock_total_count"`    // 全部用户总抽奖次数达到该值后解锁奖品
	DailyAmountLimit float64 `json:"daily_amount_limit"`    // 当天消费金额限制（0 表示不限制）
	Images           string  `json:"images"`                // 奖品图片
}

// CreatePrizeResp 创建成功响应
type CreatePrizeResp struct {
	ID uint32 `json:"id"`
}

type DeletePrizeRequest struct {
	ID uint `json:"id" binding:"required"` // 奖品ID
}

type PrizeListRequest struct {
	Page     int    `json:"page_index"` // 页码
	PageSize int    `json:"page_size"`  // 每页条数
	Name     string `json:"name"`       // 奖品名称（模糊搜索）
	Status   int    `json:"status"`     // 奖品状态：1-启用，2-禁用（不传则全部）
	Level    int    `json:"level"`      // 奖品等级（如 1 表示一等奖）
}

type PrizeListResponse struct {
	List     []LotteryPrize `json:"list"`       // 奖品列表
	Total    int64          `json:"total"`      // 总数
	Page     int            `json:"page_index"` // 页码
	PageSize int            `json:"page_size"`  // 每页条数
}

type LotteryRecordListRequest struct {
	Page        int    `json:"page_index"`   // 页码
	PageSize    int    `json:"page_size"`    // 每页条数
	Uid         uint   `json:"uid"`          // 用户ID
	Tel         string `json:"tel"`          // 手机号
	StoreId     uint64 `json:"store_id"`     // 门店ID
	MemberLevel uint32 `json:"member_level"` // 会员等级
	StartTime   string `json:"start_time"`   // 抽奖开始时间
	EndTime     string `json:"end_time"`     // 抽奖结束时间
	PrizeLevel  int    `json:"prize_level"`  // 奖品等级
	WinStatus   int    `json:"win_status"`   // 新增字段：0=全部，1=已中奖，2=未中奖
}

type LotteryRecordWithUserInfo struct {
	LotteryRecord
	Tel         string `json:"tel"`
	MemberLevel uint32 `json:"member_level"` // 会员等级
	StoreId     uint64 `json:"store_id"`     // 门店id
	StoreName   string `json:"store_name"`   // 门店名称
}

type LotteryRecordListResponse struct {
	List     []LotteryRecordWithUserInfo `json:"list"`
	Total    int64                       `json:"total"`
	Page     int                         `json:"page_index"` // 页码
	PageSize int                         `json:"page_size"`  // 每页条数
}

type LotteryPrizeOrderListRequest struct {
	Page        int    `json:"page_index"`   // 页码
	PageSize    int    `json:"page_size"`    // 每页条数
	Uid         uint   `json:"uid"`          // 用户ID
	Tel         string `json:"tel"`          // 手机号
	StoreId     uint64 `json:"store_id"`     // 门店ID
	MemberLevel uint32 `json:"member_level"` // 用户会员等级
	PrizeName   string `json:"prize_name"`   // 奖品名称模糊搜索
	Status      int    `json:"status"`       // 发货状态筛选：0-待发货 1-已发货 2-已收货 3-取消 4-全部
	StartTime   string `json:"start_time"`   // 抽奖时间开始
	EndTime     string `json:"end_time"`     // 抽奖时间结束
}

type LotteryPrizeOrderItem struct {
	LotteryPrizeOrder

	StoreId     uint64 `json:"store_id"`     // 门店ID
	StoreName   string `json:"store_name"`   // 门店名
	MemberLevel uint32 `json:"member_level"` // 会员等级
}

type LotteryPrizeOrderListResponse struct {
	List     []LotteryPrizeOrderItem `json:"list"`
	Total    int64                   `json:"total"`
	Page     int                     `json:"page_index"` // 页码
	PageSize int                     `json:"page_size"`  // 每页条数
}

type GetLotteryPrizeOrderDetailRequest struct {
	OrderID uint `json:"order_id" binding:"required"` // 奖品订单ID
}

type LotteryPrizeOrderDetailResponse struct {
	LotteryPrizeOrder

	// 用户信息
	Nickname    string `json:"nickname"`     // 用户昵称
	Tel         string `json:"tel"`          // 用户手机号
	MemberLevel uint32 `json:"member_level"` // 当前会员等级
	StoreName   string `json:"store_name"`   // 所属门店

	// 奖品信息（扩展字段）
	PrizeType  int `json:"prize_type"`  // 奖品类型
	PrizeLevel int `json:"prize_level"` // 奖品等级
	PrizeValue int `json:"prize_value"` // 奖品值
}

type ShipLotteryPrizeOrderRequest struct {
	OrderID          uint   `json:"order_id" binding:"required"`          // 奖品订单ID
	LogisticsCompany string `json:"logistics_company" binding:"required"` // 快递公司
	LogisticsNumber  string `json:"logistics_number" binding:"required"`  // 快递单号
}

func TrimTrailingZerosFromPercent(s string) string {
	// 去掉最后的 "%"
	s = strings.TrimSuffix(s, "%")
	// 去掉小数部分末尾的 0
	s = strings.TrimRight(s, "0")
	// 如果小数点在最后，也去掉
	s = strings.TrimRight(s, ".")
	return s + "%"
}

type PickupLotteryPrizeOrderRequest struct {
	OrderID uint `json:"order_id" binding:"required"` // 奖品订单ID
}
