package model

import "gorm.io/gorm"

// 支付渠道类型常量
const (
	ProviderTypeWechat   = "wechat"    // 微信直连（v3 API）
	ProviderTypeWechatV2 = "wechat_v2" // 微信直连（v2 API，仅需 APIv2Key，无需证书序列号）
	ProviderTypeFuiou    = "fuiou"     // 富友
)

// 支付宝支付过期默认分钟数
const DefaultAliPayExpireMinutes = 30

// WechatConfig 微信参数配置模型
// 管理微信公众号 OAuth、小程序、微信直连支付、富友支付等多套配置
// 同一时间只有一条记录处于 is_active=true（全局唯一生效配置）
type WechatConfig struct {
	gorm.Model
	BaseModel `gorm:"embedded"`

	Name         string  `gorm:"column:name;type:varchar(100);not null;comment:配置名称" json:"name"`
	Description  *string `gorm:"column:description;type:text;comment:配置描述" json:"description,omitempty"`
	ProviderType string  `gorm:"column:provider_type;type:varchar(20);not null;comment:支付渠道类型(wechat-微信直连,fuiou-富友)" json:"provider_type"`
	IsActive     bool    `gorm:"column:is_active;type:boolean;not null;default:false;comment:是否激活（全局唯一）" json:"is_active"`

	// OAuth 公众号
	OaAppID            string `gorm:"column:oa_app_id;type:varchar(100);not null;default:'';comment:公众号AppID" json:"oa_app_id"`
	OaAppSecret        string `gorm:"column:oa_app_secret;type:varchar(200);not null;default:'';comment:公众号AppSecret" json:"oa_app_secret"`
	OaToken            string `gorm:"column:oa_token;type:varchar(200);default:'';comment:公众号Token" json:"oa_token"`
	OaAesKey           string `gorm:"column:oa_aes_key;type:varchar(200);default:'';comment:公众号AES加密Key" json:"oa_aes_key"`
	OaOAuthRedirectURL string `gorm:"column:oa_oauth_redirect_url;type:varchar(500);default:'';comment:OAuth回调地址" json:"oa_oauth_redirect_url"`

	// OAuth 小程序
	MiniappAppID     string `gorm:"column:miniapp_app_id;type:varchar(100);default:'';comment:小程序AppID" json:"miniapp_app_id"`
	MiniappAppSecret string `gorm:"column:miniapp_app_secret;type:varchar(200);default:'';comment:小程序AppSecret" json:"miniapp_app_secret"`

	// 支付-微信直连
	WxMchID       string `gorm:"column:wx_mch_id;type:varchar(100);default:'';comment:微信商户号" json:"wx_mch_id"`
	WxAPIV3Key    string `gorm:"column:wx_api_v3_key;type:varchar(200);default:'';comment:微信APIv3密钥" json:"wx_api_v3_key"`
	WxAPIV2Key    string `gorm:"column:wx_api_v2_key;type:varchar(200);default:'';comment:微信APIv2密钥" json:"wx_api_v2_key"`
	WxCertContent string `gorm:"column:wx_cert_content;type:text;default:'';comment:微信支付证书内容" json:"wx_cert_content"`
	WxKeyContent  string `gorm:"column:wx_key_content;type:text;default:'';comment:微信支付密钥内容" json:"wx_key_content"`
	WxSerialNo    string `gorm:"column:wx_serial_no;type:varchar(200);default:'';comment:微信证书序列号" json:"wx_serial_no"`
	WxNotifyURL   string `gorm:"column:wx_notify_url;type:varchar(500);default:'';comment:微信支付回调地址" json:"wx_notify_url"`

	// 支付-富友
	FyInsCd      string `gorm:"column:fy_ins_cd;type:varchar(50);default:'';comment:富友机构号" json:"fy_ins_cd"`
	FyMchntCd    string `gorm:"column:fy_mchnt_cd;type:varchar(50);default:'';comment:富友商户号" json:"fy_mchnt_cd"`
	FyTermID     string `gorm:"column:fy_term_id;type:varchar(50);default:'';comment:富友终端号" json:"fy_term_id"`
	FyPrivateKey string `gorm:"column:fy_private_key;type:text;default:'';comment:富友私钥" json:"fy_private_key"`
	FyPublicKey  string `gorm:"column:fy_public_key;type:text;default:'';comment:富友公钥" json:"fy_public_key"`
	FyAPIURL     string `gorm:"column:fy_api_url;type:varchar(500);default:'';comment:富友API地址" json:"fy_api_url"`
	FyNotifyURL  string `gorm:"column:fy_notify_url;type:varchar(500);default:'';comment:富友支付回调地址" json:"fy_notify_url"`

	// 支付-支付宝（与微信/富友并存，provider_type 不新增 alipay）
	AliAppID            string `gorm:"column:ali_app_id;type:varchar(100);not null;default:'';comment:支付宝应用ID" json:"ali_app_id"`
	AliPrivateKey       string `gorm:"column:ali_private_key;type:text;not null;default:'';comment:支付宝应用私钥（敏感）" json:"ali_private_key"`
	AliPublicKey        string `gorm:"column:ali_public_key;type:text;not null;default:'';comment:支付宝公钥（用于验签）" json:"ali_public_key"`
	AliNotifyURL        string `gorm:"column:ali_notify_url;type:varchar(500);not null;default:'';comment:支付宝异步通知地址" json:"ali_notify_url"`
	AliReturnURL        string `gorm:"column:ali_return_url;type:varchar(500);not null;default:'';comment:支付宝同步跳转地址" json:"ali_return_url"`
	AliProduction       bool   `gorm:"column:ali_production;type:boolean;not null;default:false;comment:是否生产环境" json:"ali_production"`
	AliPayExpireMinutes int    `gorm:"column:ali_pay_expire_minutes;type:integer;not null;default:30;comment:支付过期分钟数" json:"ali_pay_expire_minutes"`
}

// TableName 指定表名
func (WechatConfig) TableName() string {
	return "tb_wechat_config"
}
