package dto

import "time"

// SystemConfigListRequest 是系统配置分页查询参数。
type SystemConfigListRequest struct {
	Module   string `json:"module" query:"module" validate:"omitempty,oneof=carrier_callback c2b.payment" enum:"carrier_callback,c2b.payment" description:"模块筛选 (carrier_callback:运营商回调配置, c2b.payment:C端支付方式配置)"`
	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:"每页数量"`
}

// SystemConfigItem 是超级管理员可见的受控配置投影。
type SystemConfigItem struct {
	ConfigKey   string     `json:"config_key" description:"稳定配置 Key"`
	Value       string     `json:"value" description:"配置值；敏感值按注册策略脱敏"`
	ValueType   string     `json:"value_type" description:"值类型 (string:字符串, int:整数, bool:布尔, json:JSON)"`
	Module      string     `json:"module" enum:"carrier_callback,c2b.payment" description:"所属模块 (carrier_callback:运营商回调配置, c2b.payment:C端支付方式配置)"`
	Description string     `json:"description" description:"中文说明"`
	Readonly    bool       `json:"readonly" description:"是否只读"`
	Sensitive   bool       `json:"sensitive" description:"是否敏感"`
	Registered  bool       `json:"registered" description:"是否已在代码注册"`
	Control     string     `json:"control" description:"前端控件提示"`
	EnumValues  []string   `json:"enum_values,omitempty" description:"允许的枚举值"`
	Min         *int64     `json:"min,omitempty" description:"整数最小值"`
	Max         *int64     `json:"max,omitempty" description:"整数最大值"`
	UpdatedAt   *time.Time `json:"updated_at,omitempty" description:"最近更新时间"`
}

// SystemConfigListResponse 是系统配置分页结果。
type SystemConfigListResponse struct {
	List     []SystemConfigItem `json:"list" description:"配置列表"`
	Total    int64              `json:"total" description:"总数量"`
	Page     int                `json:"page" description:"页码"`
	PageSize int                `json:"page_size" description:"每页数量"`
}

// UpdateSystemConfigRequest 是单 Key 更新请求。
type UpdateSystemConfigRequest struct {
	Value string `json:"value" validate:"required" required:"true" description:"字符串化配置值"`
}

// UpdateSystemConfigParams 组合路径和请求体文档参数。
type UpdateSystemConfigParams struct {
	Key string `json:"key" path:"key" validate:"required" required:"true" description:"稳定配置 Key"`
	UpdateSystemConfigRequest
}
