package authservice

//
//import (
//	"go-admin/app/admin/models"
//	"go-admin/app/admin/models/sysmodel"
//	"go-admin/app/admin/service/aduserdb"
//	"go-admin/app/admin/service/otcdb/orderdb"
//	"go-admin/common/const/enum/businesstype"
//	statuscode "go-admin/common/status_code"
//	"go-admin/pkg/googleauthhelper"
//	"go-admin/pkg/utility"
//
//	log "github.com/go-admin-team/go-admin-core/logger"
//	"gorm.io/gorm"
//
//	"go.uber.org/zap"
//)
//
//// GetUserAuthSwitch 获取用户验证器开关状态
//func GetUserAuthSwitch(orm *gorm.DB, userID int) (auth sysmodel.UserAuthSwitchStatus, err error) {
//	// 获取用户验证器开关
//	auth, err = aduserdb.GetUserAuthSwitch(orm, userID)
//	if err != nil {
//		return
//	}
//
//	if auth.PhoneAuth != 1 {
//		auth.PhoneAuth = 0
//	}
//	if auth.EmailAuth != 1 {
//		auth.EmailAuth = 0
//	}
//	if auth.GoogleAuth != 1 {
//		auth.GoogleAuth = 0
//	}
//
//	return
//}
//
//// AuthenticatorVerify 已开通验证器校验
//func AuthenticatorVerify(orm *gorm.DB, authenticator sysmodel.Authenticator) int {
//	// 是否完全验证
//	if authenticator.PhoneAuth == 1 && len(authenticator.SmsCaptcha) == 0 ||
//		authenticator.EmailAuth == 1 && len(authenticator.EmailCaptcha) == 0 ||
//		authenticator.GoogleAuth == 1 && len(authenticator.GoogleCaptcha) == 0 {
//
//		return statuscode.PleasePerformCompleteSecurityVerification
//	}
//	var phoneCheck sysmodel.CheckCaptcha
//	var emailCheck sysmodel.CheckCaptcha
//	// 校验验证码
//	if authenticator.PhoneAuth == 1 {
//		phoneCheck = sysmodel.CheckCaptcha{
//			BusinessType: int(authenticator.BusinessType),
//			Receive:      authenticator.Phone,
//			Captcha:      authenticator.SmsCaptcha,
//		}
//	}
//	if authenticator.EmailAuth == 1 {
//		emailCheck = sysmodel.CheckCaptcha{
//			BusinessType: int(authenticator.BusinessType),
//			Receive:      authenticator.Email,
//			Captcha:      authenticator.EmailCaptcha,
//		}
//	}
//	var googleSecret string
//	var googleCaptcha string
//	if authenticator.GoogleAuth == 1 {
//		googleSecret = authenticator.GoogleSecret
//		googleCaptcha = authenticator.GoogleCaptcha
//	}
//	// 检验验证码
//	code := CheckCaptchaNew(orm, phoneCheck, emailCheck, googleSecret, googleCaptcha)
//	return code
//}
//
//// AuthSwitchBefore 身份验证开关前校验（新）
//func AuthSwitchBefore(orm *gorm.DB, auth sysmodel.AuthenticatorSwitch) int {
//	// 开启手机、更改手机、开启邮箱、更改邮箱 判断是否被占用
//	var user models.AdUser
//	var err error
//	if auth.BusinessType == businesstype.OpenPhoneAuth || auth.BusinessType == businesstype.ChangePhoneAuth {
//		user, err = aduserdb.GetUserByPhone(orm, auth.NewPhoneArea, auth.NewPhone)
//		if err != nil {
//			return statuscode.ServerError
//		}
//		if user.Id != 0 && user.Id != auth.UserID {
//			return statuscode.ThePhoneHasBeenBound
//		}
//	} else if auth.BusinessType == businesstype.OpenEmailAuth || auth.BusinessType == businesstype.ChangeEmailAuth {
//		user, err = aduserdb.GetUserByEmail(orm, auth.NewEmail) //GetUser("useremail", auth.NewEmail)
//		if err != nil {
//			return statuscode.ServerError
//		}
//		if user.Id != 0 && user.Id != auth.UserID {
//			return statuscode.TheEmailHasBeenBound
//		}
//	}
//
//	// 获取用户验证器开关状态
//	authSwitch, err := GetUserAuthSwitch(orm, auth.UserID)
//	if err != nil {
//		return statuscode.ServerError
//	}
//
//	// 关闭验证器 需保证至少两个开启
//	if auth.BusinessType == businesstype.ClosePhoneAuth ||
//		auth.BusinessType == businesstype.CloseEmailAuth ||
//		auth.BusinessType == businesstype.CloseGoogleAuth {
//
//		if (authSwitch.PhoneAuth + authSwitch.EmailAuth + authSwitch.GoogleAuth) < 3 {
//			return statuscode.AllAuthMustOpen
//		}
//
//		// OTC 订单状态为：1-待付款、3-代放币、7-申诉中时，不允许解绑手机
//		if auth.BusinessType == businesstype.ClosePhoneAuth {
//			// hc todo 注释
//			// 广告
//			// sum, err := advertisedb.GetUserAdvertiseSum(auth.UserID)
//			// if err != nil {
//			// 	return statuscode.ServerError
//			// }
//			// if sum > 0 {
//			// 	return statuscode.OTCAdvertiseAreInProgress
//			// }
//			// 订单
//			num, err := orderdb.GetUnfilledOrderCount(orm, auth.UserID)
//			if err != nil {
//				return statuscode.ServerError
//			}
//			if num > 0 {
//				return statuscode.OTCOrdersAreInProgress
//			}
//		}
//	}
//	if user.Id == 0 {
//		user, err = aduserdb.GetUserById(orm, auth.UserID) //"id", auth.UserID)
//		if err != nil {
//			return statuscode.ServerError
//		}
//	}
//
//	// ==================== 1 已开通验证器校验 ==================== //
//	validator := sysmodel.Authenticator{
//		UserID:        auth.UserID,
//		PhoneAuth:     authSwitch.PhoneAuth,
//		EmailAuth:     authSwitch.EmailAuth,
//		GoogleAuth:    authSwitch.GoogleAuth,
//		Phone:         user.Phone,
//		Email:         user.UserEmail,
//		GoogleSecret:  authSwitch.GoogleSecret,
//		SmsCaptcha:    auth.SmsCaptcha,
//		EmailCaptcha:  auth.EmailCaptcha,
//		GoogleCaptcha: auth.GoogleCaptcha,
//		BusinessType:  auth.BusinessType,
//	}
//
//	// 是否完全验证
//	if validator.PhoneAuth == 1 && len(validator.SmsCaptcha) == 0 ||
//		validator.EmailAuth == 1 && len(validator.EmailCaptcha) == 0 ||
//		validator.GoogleAuth == 1 && len(validator.GoogleCaptcha) == 0 {
//
//		return statuscode.PleasePerformCompleteSecurityVerification
//	}
//	var phoneCode models.AdVerifyCode
//	if len(validator.SmsCaptcha) > 0 && !CheckOpenVerifyCode(validator.SmsCaptcha) {
//		// 校验手机号码发送的验证码
//		phoneCheck := sysmodel.CheckCaptcha{
//			BusinessType: int(businesstype.WithdrawAuth),
//			Receive:      validator.Phone,
//			Captcha:      validator.SmsCaptcha,
//		}
//		phoneCode = aduserdb.GetVerifyCode(orm, phoneCheck)
//		if phoneCode.Id == 0 {
//			return statuscode.PhoneCaptchaInvalid
//		}
//	}
//
//	var emailCode models.AdVerifyCode
//	if len(validator.EmailCaptcha) > 0 && !CheckOpenVerifyCode(validator.EmailCaptcha) {
//		// 校验邮箱号码发送的验证码
//		emailCheck := sysmodel.CheckCaptcha{
//			BusinessType: int(businesstype.WithdrawAuth),
//			Receive:      validator.Email,
//			Captcha:      validator.EmailCaptcha,
//		}
//		emailCode = aduserdb.GetVerifyCode(orm, emailCheck)
//		if emailCode.Id == 0 {
//			return statuscode.EmailCaptchaInvalid
//		}
//	}
//	if len(validator.GoogleCaptcha) > 0 {
//		// 校验谷歌的验证码
//		auth2 := googleauthhelper.VerifyCode(validator.GoogleSecret, utility.StringAsInt32(validator.GoogleCaptcha))
//		if !auth2 {
//			return statuscode.GoogleCaptchaInvalid
//		}
//	}
//
//	// ==================== 2 新绑定的验证器校验 ==================== //
//	var phoneNewCode models.AdVerifyCode
//	// 开启手机|更改手机验证 都需要校验新手机
//	if auth.BusinessType == businesstype.OpenPhoneAuth || auth.BusinessType == businesstype.ChangePhoneAuth {
//		if !CheckOpenVerifyCode(auth.NewPhoneCaptcha) {
//			cc := sysmodel.CheckCaptcha{
//				BusinessType: int(auth.BusinessType),
//				Receive:      auth.NewPhone,
//				Captcha:      auth.NewPhoneCaptcha,
//			}
//			phoneNewCode = aduserdb.GetVerifyCode(orm, cc)
//			if phoneNewCode.Id == 0 {
//				return statuscode.NewPhoneCaptchaInvalid
//			}
//		}
//	}
//
//	var emailNewCode models.AdVerifyCode
//	// 开启邮箱|更改邮箱验证 都需要校验新邮箱
//	if auth.BusinessType == businesstype.OpenEmailAuth || auth.BusinessType == businesstype.ChangeEmailAuth {
//		if !CheckOpenVerifyCode(auth.NewEmailCaptcha) {
//			cc := sysmodel.CheckCaptcha{
//				BusinessType: int(auth.BusinessType),
//				Receive:      auth.NewEmail,
//				Captcha:      auth.NewEmailCaptcha,
//			}
//			emailNewCode = aduserdb.GetVerifyCode(orm, cc)
//			if emailNewCode.Id == 0 {
//				return statuscode.NewEmailCaptchaInvalid
//			}
//		}
//	}
//
//	// 开启谷歌验证器 需要验证谷歌
//	if auth.BusinessType == businesstype.OpenGoogleAuth {
//		newSecret, _ := aduserdb.GetNewGoogleSecret(orm, auth.UserID)
//		if ok := googleauthhelper.VerifyCode(newSecret, utility.StringAsInt32(auth.NewGoogleCaptcha)); !ok {
//			// tx.Rollback()
//			log.Error("google验证码校验失败")
//			return statuscode.GoogleCaptchaInvalid
//		}
//	}
//	if phoneCode.Id == 0 && phoneNewCode.Id == 0 && emailCode.Id == 0 && emailNewCode.Id == 0 {
//		log.Error("AuthSwitchBefore", zap.String("没验证旧手机、新手机、旧邮箱、新邮箱,估计只验证谷歌验证器",
//			"phoneCode.Id ==0 && phoneNewCode.Id ==0 && emailCode.Id ==0&& emailNewCode.Id ==0"))
//		return statuscode.OK
//	}
//
//	var transCode int
//	err = orm.Transaction(func(tx *gorm.DB) error {
//		// ==================== 1 已开通验证器校验，修改表数据为已验证 ==================== //
//		if phoneCode.Id > 0 { // 旧手机验证码修改
//			err := aduserdb.UpdateVerifyFlag(tx, phoneCode.Id)
//			if err != nil {
//				log.Error("AuthSwitchBefore phoneCode", zap.Error(err))
//				// _ = tx.Rollback()
//				transCode = statuscode.PhoneCaptchaInvalid
//				return err
//			}
//		}
//		if emailCode.Id > 0 { // 旧邮箱验证码修改
//			err = aduserdb.UpdateVerifyFlag(tx, emailCode.Id)
//			if err != nil {
//				log.Error("AuthSwitchBefore emailCode", zap.Error(err))
//				// _ = tx.Rollback()
//				transCode = statuscode.EmailCaptchaInvalid
//
//				return err
//			}
//		}
//
//		// ==================== 2 新绑定的验证器校验，修改表数据为已验证 ==================== //
//		if phoneNewCode.Id > 0 { // 新手机验证码修改
//			err = aduserdb.UpdateVerifyFlag(tx, phoneNewCode.Id)
//			if err != nil {
//				log.Error("AuthSwitchBefore phoneNewCode", zap.Error(err))
//
//				transCode = statuscode.PhoneCaptchaInvalid
//
//				return err
//			}
//		}
//		if emailNewCode.Id > 0 { // 新邮箱验证码修改
//			err = aduserdb.UpdateVerifyFlag(tx, emailNewCode.Id)
//			if err != nil {
//				log.Error("AuthSwitchBefore emailNewCode", zap.Error(err))
//
//				transCode = statuscode.EmailCaptchaInvalid
//
//				return err
//			}
//		}
//
//		return nil
//	})
//	// 开启事务
//	// tx, err := dbhelper.MasterPgdb.Beginx()
//	// if err != nil {
//	// 	return statuscode.ServerError
//	// }
//
//	// // ==================== 1 已开通验证器校验，修改表数据为已验证 ==================== //
//	// if phoneCode.Id > 0 { // 旧手机验证码修改
//	// 	err = aduserdb.UpdateVerifyFlag(phoneCode.Id, tx)
//	// 	if err != nil {
//	// 		log.Error("AuthSwitchBefore phoneCode", zap.Error(err))
//	// 		_ = tx.Rollback()
//	// 		return statuscode.PhoneCaptchaInvalid
//	// 	}
//	// }
//	// if emailCode.Id > 0 { // 旧邮箱验证码修改
//	// 	err = aduserdb.UpdateVerifyFlag(emailCode.Id, tx)
//	// 	if err != nil {
//	// 		log.Error("AuthSwitchBefore emailCode", zap.Error(err))
//	// 		_ = tx.Rollback()
//	// 		return statuscode.EmailCaptchaInvalid
//	// 	}
//	// }
//
//	// // ==================== 2 新绑定的验证器校验，修改表数据为已验证 ==================== //
//	// if phoneNewCode.Id > 0 { // 新手机验证码修改
//	// 	err = aduserdb.UpdateVerifyFlag(phoneNewCode.Id, tx)
//	// 	if err != nil {
//	// 		log.Error("AuthSwitchBefore phoneNewCode", zap.Error(err))
//	// 		_ = tx.Rollback()
//	// 		return statuscode.PhoneCaptchaInvalid
//	// 	}
//	// }
//	// if emailNewCode.Id > 0 { // 新邮箱验证码修改
//	// 	err = aduserdb.UpdateVerifyFlag(emailNewCode.Id, tx)
//	// 	if err != nil {
//	// 		log.Error("AuthSwitchBefore emailNewCode", zap.Error(err))
//	// 		_ = tx.Rollback()
//	// 		return statuscode.EmailCaptchaInvalid
//	// 	}
//	// }
//	// // 提交事务
//	// if err = tx.Commit(); err != nil {
//	// 	return statuscode.ServerError
//	// }
//
//	if err != nil {
//		return transCode
//	}
//	return statuscode.OK
//}
//
//// AuthSwitchNew 身份验证开关（新）
//func AuthSwitchNew(orm *gorm.DB, auth sysmodel.AuthenticatorSwitch) int {
//	// 验证器-开关
//	switch auth.BusinessType {
//	case businesstype.OpenPhoneAuth:
//		if err := aduserdb.BindPhoneAuth(orm, auth.UserID, auth.NewPhoneArea, auth.NewPhone); err != nil {
//			return statuscode.ServerError
//		}
//	case businesstype.ChangePhoneAuth:
//		if err := aduserdb.ChangePhoneAuth(orm, auth.UserID, auth.NewPhoneArea, auth.NewPhone); err != nil {
//			return statuscode.ServerError
//		}
//		// hc todo 注释掉 先不急
//		// 更新商家信息
//		// merchant := merchantdb.GetMerchantInfoForUserId(orm, auth.UserID)
//		// if merchant.Id > 0 {
//		// 	_ = merchantdb.UpdateMerchantMobile(auth.UserID, auth.NewPhone)
//		// }
//	case businesstype.ClosePhoneAuth:
//		if err := aduserdb.ClosePhoneAuth(orm, auth.UserID); err != nil {
//			return statuscode.ServerError
//		}
//
//	case businesstype.OpenEmailAuth:
//		if err := aduserdb.BindEmailAuth(orm, auth.UserID, auth.NewEmail); err != nil {
//			return statuscode.ServerError
//		}
//	case businesstype.ChangeEmailAuth:
//		if err := aduserdb.ChangeEmailAuth(orm, auth.UserID, auth.NewEmail); err != nil {
//			return statuscode.ServerError
//		}
//	case businesstype.CloseEmailAuth:
//		if err := aduserdb.CloseEmailAuth(orm, auth.UserID); err != nil {
//			return statuscode.ServerError
//		}
//
//	case businesstype.OpenGoogleAuth:
//		if err := aduserdb.OpenGoogleAuth(orm, auth.UserID); err != nil {
//			return statuscode.ServerError
//		}
//	case businesstype.ChangeGoogleAuth:
//		if err := aduserdb.CloseGoogleAuth(orm, auth.UserID); err != nil {
//			return statuscode.ServerError
//		}
//	case businesstype.CloseGoogleAuth:
//		if err := aduserdb.CloseGoogleAuth(orm, auth.UserID); err != nil {
//			return statuscode.ServerError
//		}
//
//	default:
//		return statuscode.ParameterInvalid
//	}
//
//	return statuscode.OK
//}
