package sms

// SendRequest 短信发送请求
type SendRequest struct {
	UserName  string   `json:"userName"`  // 账号用户名
	Content   string   `json:"content"`   // 短信内容（直接发送内容，不使用模板）
	PhoneList []string `json:"phoneList"` // 发送手机号码列表
	Timestamp int64    `json:"timestamp"` // 当前时间戳（毫秒）
	Sign      string   `json:"sign"`      // 签名：MD5(userName + timestamp + MD5(password))
}

// SendResponse 短信发送响应
type SendResponse struct {
	Code     int    `json:"code"`     // 处理结果，0为成功，其他失败
	Message  string `json:"message"`  // 处理结果描述
	MsgID    int64  `json:"msgId"`    // 消息ID（当code=0时返回）
	SMSCount int    `json:"smsCount"` // 消耗计费总数（当code=0时返回）
}

// 错误码常量
const (
	CodeSuccess                  = 0   // 处理成功
	CodeEmptyUserName            = 1   // 帐号名为空
	CodeAuthFailed               = 2   // 帐号名或密码鉴权错误
	CodeAccountLocked            = 3   // 帐号已被锁定
	CodeBusinessNotOpened        = 4   // 此帐号业务未开通
	CodeInsufficientBalance      = 5   // 帐号余额不足
	CodeMissingPhoneNumbers      = 6   // 缺少发送号码
	CodeTooManyPhoneNumbers      = 7   // 超过最大发送号码数
	CodeEmptyContent             = 8   // 发送消息内容为空
	CodeInvalidIP                = 10  // 非法的IP地址
	CodeTimeLimitRestriction     = 11  // 24小时发送时间段限制
	CodeInvalidScheduledTime     = 12  // 定时发送时间错误或超过15天
	CodeTooFrequent              = 13  // 请求过于频繁
	CodeInvalidExtCode           = 14  // 错误的用户扩展码
	CodeTimestampError           = 16  // 时间戳差异过大
	CodeNotRealNameAuthenticated = 18  // 帐号未进行实名认证
	CodeReceiptNotEnabled        = 19  // 帐号未开放回执状态
	CodeMissingParameters        = 22  // 缺少必填参数
	CodeDuplicateUserName        = 23  // 用户帐号名重复
	CodeNoSignatureRestriction   = 24  // 用户无签名限制
	CodeSignatureMissingBrackets = 25  // 签名需要包含【】符
	CodeInvalidContentType       = 98  // HTTP Content-Type错误
	CodeInvalidJSON              = 99  // 错误的请求JSON字符串
	CodeSystemError              = 500 // 系统异常
)

// 错误码到中文消息的映射
var errorMessages = map[int]string{
	CodeSuccess:                  "处理成功",
	CodeEmptyUserName:            "帐号名为空",
	CodeAuthFailed:               "帐号名或密码鉴权错误",
	CodeAccountLocked:            "帐号已被锁定",
	CodeBusinessNotOpened:        "此帐号业务未开通",
	CodeInsufficientBalance:      "帐号余额不足",
	CodeMissingPhoneNumbers:      "缺少发送号码",
	CodeTooManyPhoneNumbers:      "超过最大发送号码数",
	CodeEmptyContent:             "发送消息内容为空",
	CodeInvalidIP:                "非法的IP地址",
	CodeTimeLimitRestriction:     "24小时发送时间段限制",
	CodeInvalidScheduledTime:     "定时发送时间错误或超过15天",
	CodeTooFrequent:              "请求过于频繁",
	CodeInvalidExtCode:           "错误的用户扩展码",
	CodeTimestampError:           "时间戳差异过大，与系统时间误差不得超过5分钟",
	CodeNotRealNameAuthenticated: "帐号未进行实名认证",
	CodeReceiptNotEnabled:        "帐号未开放回执状态",
	CodeMissingParameters:        "缺少必填参数",
	CodeDuplicateUserName:        "用户帐号名重复",
	CodeNoSignatureRestriction:   "用户无签名限制",
	CodeSignatureMissingBrackets: "签名需要包含【】符",
	CodeInvalidContentType:       "HTTP Content-Type错误",
	CodeInvalidJSON:              "错误的请求JSON字符串",
	CodeSystemError:              "系统异常",
}

// GetErrorMessage 获取错误码对应的错误消息
func GetErrorMessage(code int) string {
	if msg, ok := errorMessages[code]; ok {
		return msg
	}
	return "未知错误"
}
