package config

import (
	"github.com/zeromicro/go-zero/core/stores/cache"
	"github.com/zeromicro/go-zero/rest"
)

type Config struct {
	rest.RestConf
	DataSource     string
	CacheRedis     cache.CacheConf
	JwtAuth        JwtAuth // JWT 鉴权相关配置
	VerifyCode     VerifyCode
	Encrypt        Encrypt
	Alipay         AlipayConfig
	Wxpay          WxpayConfig
	Applepay       ApplepayConfig
	Ali            AliConfig
	WestConfig     WestConfig
	YushanConfig   YushanConfig
	SystemConfig   SystemConfig
	WechatH5       WechatH5Config
	WechatMini     WechatMiniConfig // 添加小程序配置
	CloudAuth      CloudAuthConfig
	Query          QueryConfig
	AdminConfig    AdminConfig
	AdminPromotion AdminPromotion
}

// JwtAuth 用于 JWT 鉴权配置
type JwtAuth struct {
	AccessSecret string // JWT 密钥，用于签发 Token
	AccessExpire int64  // Token 过期时间，单位为秒
	RefreshAfter int64
}
type VerifyCode struct {
	AccessKeyID     string
	AccessKeySecret string
	EndpointURL     string
	SignName        string
	TemplateCode    string
	ValidTime       int
}
type Encrypt struct {
	SecretKey string
}

type AlipayConfig struct {
	AppID              string
	PrivateKey         string
	AlipayPublicKey    string
	AppCertPath        string // 应用公钥证书路径
	AlipayCertPath     string // 支付宝公钥证书路径
	AlipayRootCertPath string // 根证书路径
	IsProduction       bool
	NotifyUrl          string
	ReturnURL          string
}
type WxpayConfig struct {
	AppID                      string
	MchID                      string
	MchCertificateSerialNumber string
	MchApiv3Key                string
	MchPrivateKeyPath          string
	MchPublicKeyID             string
	MchPublicKeyPath           string
	MchPlatformRAS             string
	NotifyUrl                  string
	RefundNotifyUrl            string
}
type AliConfig struct {
	Code string
}
type ApplepayConfig struct {
	ProductionVerifyURL string
	SandboxVerifyURL    string // 沙盒环境的验证 URL
	Sandbox             bool
	BundleID            string
	IssuerID            string
	KeyID               string
	LoadPrivateKeyPath  string
}
type WestConfig struct {
	Url            string
	Key            string
	SecretId       string
	SecretSecondId string
}
type YushanConfig struct {
	ApiKey string
	AcctID string
	Url    string
}
type SystemConfig struct {
	ThreeVerify bool
}
type WechatH5Config struct {
	AppID     string
	AppSecret string
}

// WechatMiniConfig 小程序配置
type WechatMiniConfig struct {
	AppID     string
	AppSecret string
}

type CloudAuthConfig struct {
	AccessKeyId     string
	AccessKeySecret string
	Endpoint        string
	SceneId         int64
	ReturnUrl       string
}
type QueryConfig struct {
	ShareLinkExpire int64
}
type AdminConfig struct {
	AccessSecret string
	AccessExpire int64
	RefreshAfter int64
}

type AdminPromotion struct {
	URLDomain string
}
