package dto

// GrantPackageItem 授权套餐操作项（用于创建/管理套餐列表）
type GrantPackageItem struct {
	PackageID uint   `json:"package_id" validate:"required" required:"true" minimum:"1" description:"套餐ID"`
	CostPrice *int64 `json:"cost_price,omitempty" validate:"omitempty,min=0" minimum:"0" description:"成本价（分），新增或调价时必填"`
	Remove    *bool  `json:"remove,omitempty" description:"是否删除该套餐授权（true=删除）"`
}

// ShopSeriesGrantPackageItem 授权套餐详情（响应中的套餐信息）
type ShopSeriesGrantPackageItem struct {
	PackageID               uint    `json:"package_id" description:"套餐ID"`
	PackageName             string  `json:"package_name" description:"套餐名称"`
	PackageCode             string  `json:"package_code" description:"套餐编码"`
	CostPrice               int64   `json:"cost_price" description:"成本价（分）"`
	ShelfStatus             int     `json:"shelf_status" description:"上架状态 1-上架 2-下架"`
	Status                  int     `json:"status" description:"分配状态 0=禁用 1=启用"`
	DefaultExpiryBase       string  `json:"default_expiry_base" description:"套餐默认生效条件 (from_activation:实名激活时生效, from_purchase:购买即生效)"`
	DefaultExpiryBaseName   string  `json:"default_expiry_base_name" description:"套餐默认生效条件名称（中文）"`
	ExpiryBaseOverride      *string `json:"expiry_base_override" description:"分配生效条件覆盖，null 表示跟随套餐默认值"`
	ExpiryBaseOverrideName  string  `json:"expiry_base_override_name" description:"分配生效条件覆盖名称（中文）"`
	EffectiveExpiryBase     string  `json:"effective_expiry_base" description:"最终生效条件 (from_activation:实名激活时生效, from_purchase:购买即生效)"`
	EffectiveExpiryBaseName string  `json:"effective_expiry_base_name" description:"最终生效条件名称（中文）"`
}

// GrantCommissionTierItem 梯度佣金档位（operator/dimension/stat_scope 仅出现在响应中，来自 PackageSeries 全局配置）
type GrantCommissionTierItem struct {
	Operator  string `json:"operator,omitempty" description:"比较运算符（>、>=、<、<=），响应中从 PackageSeries 合并，请求中不传"`
	Dimension string `json:"dimension,omitempty" description:"统计维度（sales_count:销售量, sales_amount:销售额），来自 PackageSeries 全局配置，响应中只读"`
	StatScope string `json:"stat_scope,omitempty" description:"统计范围（self:仅自己, self_and_sub:自己+下级），来自 PackageSeries 全局配置，响应中只读"`
	Threshold int64  `json:"threshold" description:"阈值（与 PackageSeries 全局配置对应）"`
	Amount    int64  `json:"amount" description:"该代理在此档位的佣金金额（分）"`
}

// ShopSeriesGrantResponse 系列授权详情响应
type ShopSeriesGrantResponse struct {
	ID                      uint                         `json:"id" description:"授权记录ID"`
	ShopID                  uint                         `json:"shop_id" description:"被授权店铺ID"`
	ShopName                string                       `json:"shop_name" description:"被授权店铺名称"`
	SeriesID                uint                         `json:"series_id" description:"套餐系列ID"`
	SeriesName              string                       `json:"series_name" description:"套餐系列名称"`
	SeriesCode              string                       `json:"series_code" description:"套餐系列编码"`
	CommissionType          string                       `json:"commission_type" description:"佣金类型 fixed-固定 tiered-梯度"`
	OneTimeCommissionAmount int64                        `json:"one_time_commission_amount" description:"固定模式佣金金额（分），梯度模式返回 0"`
	CommissionTiers         []GrantCommissionTierItem    `json:"commission_tiers" description:"梯度模式阶梯列表（固定模式为空）"`
	ForceRechargeLocked     bool                         `json:"force_recharge_locked" description:"强充是否被平台锁定（true 时代理不可修改）"`
	ForceRechargeEnabled    bool                         `json:"force_recharge_enabled" description:"是否启用强充"`
	ForceRechargeAmount     int64                        `json:"force_recharge_amount" description:"强充金额（分）"`
	AllocatorShopID         uint                         `json:"allocator_shop_id" description:"分配者店铺ID，0 表示平台"`
	AllocatorShopName       string                       `json:"allocator_shop_name" description:"分配者店铺名称"`
	Status                  int                          `json:"status" description:"状态 0=禁用 1=启用"`
	Packages                []ShopSeriesGrantPackageItem `json:"packages" description:"已授权套餐列表"`
	CreatedAt               string                       `json:"created_at" description:"创建时间"`
	UpdatedAt               string                       `json:"updated_at" description:"更新时间"`
}

// CreateShopSeriesGrantRequest 创建系列授权请求
type CreateShopSeriesGrantRequest struct {
	ShopID                  uint                      `json:"shop_id" validate:"required" required:"true" minimum:"1" description:"被授权代理店铺ID"`
	SeriesID                uint                      `json:"series_id" validate:"required" required:"true" minimum:"1" description:"套餐系列ID"`
	OneTimeCommissionAmount *int64                    `json:"one_time_commission_amount,omitempty" description:"固定模式佣金金额（分），固定模式必填"`
	CommissionTiers         []GrantCommissionTierItem `json:"commission_tiers,omitempty" description:"梯度模式阶梯配置，梯度模式必填"`
	EnableForceRecharge     *bool                     `json:"enable_force_recharge,omitempty" description:"是否启用代理强充"`
	ForceRechargeAmount     *int64                    `json:"force_recharge_amount,omitempty" description:"代理强充金额（分）"`
	Packages                []GrantPackageItem        `json:"packages" validate:"required,min=1,max=100,dive" required:"true" minItems:"1" maxItems:"100" description:"初始授权套餐列表（1～100项，套餐ID不可重复）"`
	ExpiryBaseOverride      *string                   `json:"expiry_base_override" nullable:"true" description:"分配生效条件覆盖 (null:跟随套餐默认值, from_activation:实名激活时生效, from_purchase:购买即生效)"`
	ExpiryBaseOverrideSet   bool                      `json:"-"`
}

// UpdateShopSeriesGrantRequest 更新系列授权请求
type UpdateShopSeriesGrantRequest struct {
	OneTimeCommissionAmount *int64                    `json:"one_time_commission_amount,omitempty" description:"固定模式佣金金额（分）"`
	CommissionTiers         []GrantCommissionTierItem `json:"commission_tiers,omitempty" description:"梯度模式阶梯配置"`
	EnableForceRecharge     *bool                     `json:"enable_force_recharge,omitempty" description:"是否启用代理强充"`
	ForceRechargeAmount     *int64                    `json:"force_recharge_amount,omitempty" description:"代理强充金额（分）"`
}

// ManageGrantPackagesRequest 管理授权套餐请求
type ManageGrantPackagesRequest struct {
	Packages              []GrantPackageItem `json:"packages" validate:"required,min=1,max=100,dive" required:"true" minItems:"1" maxItems:"100" description:"套餐操作列表（1～100项，套餐ID不可重复）"`
	ExpiryBaseOverride    *string            `json:"expiry_base_override" nullable:"true" description:"新增分配的生效条件覆盖 (null:跟随套餐默认值, from_activation:实名激活时生效, from_purchase:购买即生效)"`
	ExpiryBaseOverrideSet bool               `json:"-"`
}

// ShopSeriesGrantListRequest 系列授权列表查询请求
type ShopSeriesGrantListRequest struct {
	Page            int   `json:"page" query:"page" validate:"omitempty,min=1" minimum:"1" description:"页码"`
	PageSize        int   `json:"page_size" query:"page_size" validate:"omitempty,min=1,max=100" minimum:"1" maximum:"100" description:"每页数量"`
	ShopID          *uint `json:"shop_id" query:"shop_id" validate:"omitempty" description:"过滤被授权店铺ID"`
	SeriesID        *uint `json:"series_id" query:"series_id" validate:"omitempty" description:"过滤套餐系列ID"`
	AllocatorShopID *uint `json:"allocator_shop_id" query:"allocator_shop_id" validate:"omitempty" description:"过滤分配者店铺ID"`
	Status          *int  `json:"status" query:"status" validate:"omitempty" description:"过滤状态 0=禁用 1=启用"`
}

// ShopSeriesGrantListItem 系列授权列表项
type ShopSeriesGrantListItem struct {
	ID                      uint   `json:"id" description:"授权记录ID"`
	ShopID                  uint   `json:"shop_id" description:"被授权店铺ID"`
	ShopName                string `json:"shop_name" description:"被授权店铺名称"`
	SeriesID                uint   `json:"series_id" description:"套餐系列ID"`
	SeriesName              string `json:"series_name" description:"套餐系列名称"`
	CommissionType          string `json:"commission_type" description:"佣金类型"`
	OneTimeCommissionAmount int64  `json:"one_time_commission_amount" description:"固定模式佣金金额（分）"`
	ForceRechargeEnabled    bool   `json:"force_recharge_enabled" description:"是否启用强充"`
	ForceRechargeLocked     bool   `json:"force_recharge_locked" description:"强充是否被套餐系列锁定（true 时代理不可修改）"`
	ForceRechargeAmount     int64  `json:"force_recharge_amount" description:"强充金额（分）"`
	AllocatorShopID         uint   `json:"allocator_shop_id" description:"分配者店铺ID"`
	AllocatorShopName       string `json:"allocator_shop_name" description:"分配者店铺名称"`
	PackageCount            int    `json:"package_count" description:"已授权套餐数量"`
	Status                  int    `json:"status" description:"状态 0=禁用 1=启用"`
	CreatedAt               string `json:"created_at" description:"创建时间"`
}

// ShopSeriesGrantPageResult 系列授权分页结果
type ShopSeriesGrantPageResult struct {
	List     []*ShopSeriesGrantListItem `json:"items" description:"授权列表"`
	Total    int64                      `json:"total" description:"总数"`
	Page     int                        `json:"page" description:"当前页"`
	PageSize int                        `json:"size" description:"每页数量"`
}

// UpdateShopSeriesGrantParams 更新系列授权聚合参数（文档生成用）
type UpdateShopSeriesGrantParams struct {
	IDReq
	UpdateShopSeriesGrantRequest
}

// ManageGrantPackagesParams 管理授权套餐聚合参数（文档生成用）
type ManageGrantPackagesParams struct {
	IDReq
	ManageGrantPackagesRequest
}
