package constants

import "time"

// Fiber Locals 的上下文键
const (
	ContextKeyRequestID    = "requestid"     // 请求记录ID
	ContextKeyStartTime    = "start_time"    // 请求开始时间
	ContextKeyUserID       = "user_id"       // 用户ID
	ContextKeyUserType     = "user_type"     // 用户类型
	ContextKeyShopID       = "shop_id"       // 店铺ID
	ContextKeyEnterpriseID = "enterprise_id" // 企业ID
	ContextKeyCustomerID   = "customer_id"   // 个人客户ID
	ContextKeyUserInfo     = "user_info"     // 完整的用户信息
	ContextKeyIP           = "ip_address"    // IP地址
	ContextKeyUserAgent    = "user_agent"    // User-Agent
)

// 配置环境变量
const (
	EnvConfigPath = "CONFIG_PATH"
	EnvConfigEnv  = "CONFIG_ENV" // dev, staging, prod
)

// 默认配置值
const (
	DefaultConfigPath = "configs/config.yaml"
	DefaultServerAddr = ":3000"
	DefaultRedisAddr  = "localhost:6379"
)

// 数据库配置常量
const (
	DefaultMaxOpenConns    = 25
	DefaultMaxIdleConns    = 10
	DefaultConnMaxLifetime = 5 * time.Minute
	DefaultPageSize        = 20
	MaxPageSize            = 100
	SlowQueryThreshold     = 100 * time.Millisecond
)

// 任务类型常量
const (
	TaskTypeEmailSend              = "email:send"               // 发送邮件
	TaskTypeDataSync               = "data:sync"                // 数据同步
	TaskTypeSIMStatusSync          = "sim:status:sync"          // SIM 卡状态同步
	TaskTypeCommission             = "commission:calculate"     // 分佣计算
	TaskTypeIotCardImport          = "iot_card:import"          // IoT 卡批量导入
	TaskTypeDeviceImport           = "device:import"            // 设备批量导入
	TaskTypeCommissionStatsUpdate  = "commission:stats:update"  // 佣金统计更新
	TaskTypeCommissionStatsSync    = "commission:stats:sync"    // 佣金统计同步
	TaskTypeCommissionStatsArchive = "commission:stats:archive" // 佣金统计归档
)

// 用户状态常量
const (
	UserStatusActive    = "active"    // 激活
	UserStatusInactive  = "inactive"  // 未激活
	UserStatusSuspended = "suspended" // 暂停
)

// RBAC 用户类型常量
const (
	UserTypeSuperAdmin       = 1 // 超级管理员（跳过数据权限过滤）
	UserTypePlatform         = 2 // 平台用户
	UserTypeAgent            = 3 // 代理账号
	UserTypeEnterprise       = 4 // 企业账号
	UserTypePersonalCustomer = 5 // 个人客户（C端用户）
)

// RBAC 角色类型常量
const (
	RoleTypePlatform = 1 // 平台角色（适用于平台用户）
	RoleTypeCustomer = 2 // 客户角色（适用于代理/企业账号）
)

// RBAC 权限类型常量
const (
	PermissionTypeMenu   = 1 // 菜单权限
	PermissionTypeButton = 2 // 按钮权限
)

// RBAC 权限端口常量
const (
	PlatformAll = "all" // 全部端口（Web + H5）
	PlatformWeb = "web" // Web 后台
	PlatformH5  = "h5"  // H5 端
)

// RBAC 状态常量
const (
	StatusDisabled = 0 // 禁用
	StatusEnabled  = 1 // 启用
)

// 上架状态常量
const (
	ShelfStatusOn  = 1 // 上架
	ShelfStatusOff = 2 // 下架
)

// 运营商类型常量
const (
	CarrierTypeCMCC = "CMCC" // 中国移动
	CarrierTypeCUCC = "CUCC" // 中国联通
	CarrierTypeCTCC = "CTCC" // 中国电信
	CarrierTypeCBN  = "CBN"  // 中国广电
)

// 订单状态常量
const (
	OrderStatusPending    = "pending"    // 待支付
	OrderStatusPaid       = "paid"       // 已支付
	OrderStatusProcessing = "processing" // 处理中
	OrderStatusCompleted  = "completed"  // 已完成
	OrderStatusCancelled  = "cancelled"  // 已取消
)

// 队列配置常量
const (
	QueueCritical      = "critical" // 关键任务队列
	QueueDefault       = "default"  // 默认队列
	QueueLow           = "low"      // 低优先级队列
	DefaultRetryMax    = 5
	DefaultTimeout     = 10 * time.Minute
	DefaultConcurrency = 10
)

// 店铺配置常量
const (
	MaxShopLevel = 7 // 店铺最大层级
)

// 验证码配置常量
const (
	VerificationCodeLength     = 6                // 验证码长度（6位数字）
	VerificationCodeExpiration = 5 * time.Minute  // 验证码过期时间（5分钟）
	VerificationCodeRateLimit  = 60 * time.Second // 验证码发送频率限制（60秒）
)

// ======== 默认超级管理员账号配置（用于系统初始化） ========

// DefaultAdminUsername 默认超级管理员用户名
const DefaultAdminUsername = "admin"

// DefaultAdminPassword 默认超级管理员密码
const DefaultAdminPassword = "Admin@123456"

// DefaultAdminPhone 默认超级管理员手机号
const DefaultAdminPhone = "13800000000"

// ======== 企业卡授权相关常量 ========

// AuthorizerType 授权人类型
const (
	AuthorizerTypePlatform = UserTypePlatform // 平台用户授权(2)
	AuthorizerTypeAgent    = UserTypeAgent    // 代理账号授权(3)
)
