package aduserdb

import (
	"errors"
	log "github.com/go-admin-team/go-admin-core/logger"
	"go-admin/app/admin/models"
	statuscode "go-admin/common/status_code"

	"go.uber.org/zap"
	"gorm.io/gorm"
)

//func SetUserStatus(orm *gorm.DB, req adminmodel.UserForbidReq) error {
//	// sql := `UPDATE ad_user SET
//	// 		status = :status,
//	// 		c2cadvertstatus = :c2cadvertstatus,
//	// 		vtsstatus = :vtsstatus,
//	// 		chargestatus = :chargestatus,
//	// 		withdrawalstatus = :withdrawalstatus,
//	// 		futstatus = :futstatus,
//	// 		transferstatus = :transferstatus,
//	// 		c2ctradestatus = :c2ctradestatus
//	// 		WHERE id = :id`
//	err := orm.Model(&models.AdUser{}).Where("id =?", req.ID).Updates(map[string]interface{}{"status": req.Status, "c2c_advert_status": req.C2cAdvertStatus,
//		"vts_status": req.VtsStatus, "charge_status": req.ChargeStatus, "with_drawal_status": req.WithdrawalStatus,
//		"fut_status": req.FutStatus, "transfer_status": req.TransferStatus, "c2c_trade_status": req.C2cTradeStatus}).Error
//
//	if err != nil {
//		log.Error("SetUserStatus", err)
//	}
//	return err
//}
//func SetUserInfoStopRate(orm *gorm.DB, userId int, stopRate int, openratetime time.Time) error {
//	// sql := `UPDATE ad_userinfo SET
//	// 		stoprate = $1,
//	// 		openratetime = $2
//	// 		WHERE userid = $3`
//	err := orm.Model(&models.AdUserInfo{}).Where("user_id=?", userId).Updates(map[string]interface{}{"stoprate": stopRate, "open_rate_time": openratetime}).Error
//
//	if err != nil {
//		log.Error("SetUserInfoStopRate", zap.Error(err))
//	}
//	return err
//}
//func GetUserStatusByID(orm *gorm.DB, id int) (data adminmodel.UserForbidUserResp, err error) {
//	// sql := `SELECT id,nickname,status,c2cadvertstatus,vtsstatus,chargestatus,withdrawalstatus,futstatus,transferstatus,c2ctradestatus FROM ad_user WHERE id=$1`
//
//	err = orm.Model(&models.AdUser{}).Where("id=?", id).First(&data).Error
//	if err != nil {
//		log.Error("GetUserStatusByID", zap.Error(err))
//	}
//	return
//}

// GetUserById 通过id获取用户信息
func GetUserById(orm *gorm.DB, id int) (data models.LineUser, err error) {
	// sql := "SELECT " + userFile + " FROM ad_user WHERE id= $1" //`SELECT "" FROM ad_user where id= $1`
	err = orm.Model(&data).Where("id =?", id).First(&data).Error
	if err != nil {
		log.Error("GetUserById", zap.Error(err))
	}
	return
}

// GetUserByInviteCode 根据邀请码获取用户信息
func GetUserByInviteCode(orm *gorm.DB, inviteCode string) (user models.LineUser, err error) {
	if err = orm.Model(&user).Where("invite_code = ?", inviteCode).First(&user).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
		log.Error("GetUserByInviteCode ", zap.Error(err))
		return
	}
	err = nil
	return
}

// GetUserStatusById 通过id获取用户基础状态
func GetUserStatusById(orm *gorm.DB, id int) (data models.LineUser) {
	// sql := "SELECT id,futstatus,transferstatus,withdrawalstatus,vtsstatus,chargestatus FROM ad_user WHERE id=$1" //`SELECT "" FROM ad_user where id= $1`
	err := orm.Model(&data).Where("id =?", id).First(&data).Error
	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
		log.Error("GetUserStatusById", zap.Error(err))
	}
	err = nil
	return
}

func GetUserByEmail(orm *gorm.DB, userEmail string) (user models.LineUser, err error) {
	// sql := sqlUser + ` AND useremail = $1`
	if err = orm.Model(&user).Where("email = ?", userEmail).First(&user).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
		log.Error("GetUserByEmail ", zap.Error(err))
		return
	}
	err = nil
	return
}

func GetUserByPhone(orm *gorm.DB, area, phone string) (user models.LineUser, err error) {
	// sql := sqlUser + ` AND area = $1 AND phone = $2`
	if err = orm.Model(&user).Where("area =? AND mobile =?", area, phone).First(&user).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
		log.Error("GetUserByPhone ", zap.Error(err))
		return
	}
	err = nil
	return
}

// AddUser 添加用户
func AddUser(orm *gorm.DB, user *models.LineUser) (int, error) {
	err := orm.Model(user).Create(user).Error
	// userId, err := dbhelper.MasterPgdb.InsertReIdTx("ad_user", &user, tx)
	if err != nil {
		log.Error("AddUser err", zap.Error(err))
		return user.Id, err
	}
	return user.Id, nil
}

func UpdateUserStatus(orm *gorm.DB, phone string) (int, error) {
	err := orm.Model(&models.LineUser{}).Update("status", "normal").Error
	// userId, err := dbhelper.MasterPgdb.InsertReIdTx("ad_user", &user, tx)
	if err != nil {
		log.Error("UpdateUserStatus err", zap.Error(err))
		return statuscode.ServerError, err
	}
	return 0, nil
}

// AddUserInfo 添加用户信息
//func AddUserInfo(orm *gorm.DB, userInfo models.AdUserInfo) error {
//	layout := "2006-01-02 15:04:05" // Go 的日期格式化布局
//	parsedTime, _ := time.Parse(layout, "1970-01-01 00:00:01")
//	userInfo.SecurityUpdateTime = parsedTime
//	userInfo.OpenRateTime = parsedTime
//
//	if err := orm.Model(&userInfo).Create(&userInfo).Error; err != nil {
//		log.Error("AddUserInfo error ", zap.Error(err))
//		return err
//	}
//	return nil
//}

// UpdateUserRecommend 更新用户推荐人数
func UpdateUserRecommend(orm *gorm.DB, userId int) error {
	updateSql := `UPDATE ad_user_info SET total_num = total_num + 1 WHERE user_id = ?`
	if err := orm.Exec(updateSql, userId).Error; err != nil {
		log.Error("update user recommend total failed", zap.Error(err))
		return err
	}
	return nil
}

//
//// UpdateUserPushCid 第三方离线推送clientid,绑定该cid-用户
//func UpdateUserPushCid(orm *gorm.DB, userId int, pushCId string) error {
//	//先清除之前绑定该cid的用户，
//	// updateCidSql := `UPDATE ad_userinfo SET pushcid='' WHERE pushcid=$1`
//	err := orm.Model(&models.AdUserInfo{}).Where("push_cid =?", pushCId).Update("push_cid", pushCId).Error
//	if err != nil {
//		log.Error("update user UpdateUserPushCid pushcid failed", zap.Error(err))
//		return err
//	}
//	//再绑定新用户给cid
//	// updateSql := `UPDATE ad_userinfo SET pushcid = $1 WHERE userid = $2 `
//	if err = orm.Model(&models.AdUserInfo{}).Where("user_id =?", userId).Update("push_cid", pushCId).Error; err != nil {
//		log.Error("update user UpdateUserPushCid  failed", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// UpdateUserAuth 更新认证状态
//func UpdateUserAuth(orm *gorm.DB, userId, idcardstate, authlevel int) error {
//	// updateSql := `UPDATE ad_user SET idcardstate = $1,authlevel = $2 WHERE id = $3`
//	if err := orm.Model(&models.AdUser{}).Where("id=?", userId).Updates(map[string]interface{}{"id_card_state": idcardstate,
//		"auth_level": authlevel}).Error; err != nil {
//		log.Error("UpdateUserAuth", zap.Error(err))
//		return err
//	}
//	return nil
//}
//
//// GetUserInfo 获取用户信息
//func GetUserInfo(orm *gorm.DB, userId int) (models.AdUserInfo, error) {
//	var user models.AdUserInfo
//
//	if err := orm.Model(&user).Where("user_id =?", userId).First(&user).Error; err != nil {
//		log.Error("get userinfo", zap.Error(err))
//		return user, err
//	}
//	return user, nil
//}
//
//// GetUserCId 获取用户信息cid
//func GetUserCId(orm *gorm.DB, userId int) models.AdUserInfo {
//	var user models.AdUserInfo
//	if err := orm.Model(&user).Where("user_id =?", userId).First(&user).Error; err != nil {
//		log.Error("GetUserCId", zap.Error(err))
//		return user
//	}
//	return user
//}
//
//// UpdateUserPwd 更新密码
//func UpdateUserPwd(orm *gorm.DB, userId int, password string) error {
//	// var updateSql = `UPDATE ad_user SET userpassword = $1 WHERE id = $2`
//
//	if err := orm.Model(&models.AdUser{}).Where("id =?", userId).Update("user_password", password).Error; err != nil {
//		log.Error("update user password failed", zap.Error(err))
//		return err
//	}
//	return nil
//}
//
//// UpdateUserInfo 更新
//func UpdateUserInfo(orm *gorm.DB, userinfo dto.UpdateUserInfo) error {
//	// sql := `UPDATE ad_user SET `
//	// set := make([]string, 0, 2)
//	set := make(map[string]interface{}, 0)
//	if len(userinfo.NickName) > 0 {
//		// set = append(set, " nickname = :nickname ")
//		set["nick_name"] = userinfo.NickName
//	}
//	if len(userinfo.HeadImage) > 0 {
//		// set = append(set, " image = :headimage ")
//		set["image"] = userinfo.HeadImage
//	}
//
//	if len(set) == 0 {
//		return errors.New("No changes")
//	}
//
//	if err := orm.Model(models.AdUser{}).Where("id =?", userinfo.UserID).Updates(set).Error; err != nil {
//		log.Error("UpdateUserInfo", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// SetRateCountry 设置目前用户使用的汇率(基础货币)
//func SetRateCountry(orm *gorm.DB, userId int, RateCountry string) error {
//	// sql := `UPDATE ad_userinfo SET ratecountry = $1 WHERE userid = $2`
//	data := models.AdUserInfo{}
//
//	if err := orm.Model(data).Where("user_id =?", userId).Update("rate_country", RateCountry).Error; err != nil {
//		log.Error("update ad_userinfo ratecountry failed", zap.Error(err))
//		return err
//	}
//	return nil
//}
//
//// GetUserAuthSwitch 获取用户验证器开启状态
//func GetUserAuthSwitch(orm *gorm.DB, userID int) (auth sysmodel.UserAuthSwitchStatus, err error) {
//	// sql := `SELECT phoneauthisopen, emailauthisopen, googleidcardisopen, googlesecret FROM ad_userinfo WHERE userid = $1 LIMIT 1`
//	data := models.AdUserInfo{}
//
//	err = orm.Model(data).Where("user_id =?", userID).First(&data).Error
//
//	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
//		log.Error("GetUserAuthSwitch", zap.Error(err))
//		return
//	}
//
//	err = nil
//	auth.EmailAuth = data.EmailAuthIsOpen
//	auth.GoogleAuth = data.GoogleIdcardIsOpen
//	auth.GoogleSecret = data.GoogleSecret
//	auth.PhoneAuth = data.PhoneAuthIsOpen
//
//	return
//}
//
//// BindPhoneAuth 绑定手机验证
//func BindPhoneAuth(orm *gorm.DB, userId int, area string, phone string) error {
//	// updateUser := `UPDATE ad_user SET area = $1, phone = $2 WHERE id = $3`
//	// updateUserinfo := `UPDATE ad_userinfo SET phoneauthisopen = $1 WHERE userid = $2`
//	user := models.AdUser{}
//	userInfo := models.AdUserInfo{}
//	user.Id = userId
//	user.Area = area
//	user.Phone = phone
//
//	//事务
//	err := orm.Transaction(func(tx *gorm.DB) error {
//		err := tx.Model(user).Updates(map[string]interface{}{"area": area, "phone": phone}).Error
//
//		if err != nil {
//			return err
//		}
//
//		err = tx.Model(userInfo).Where("user_id =?", userId).Update("phone_auth_is_open", sysmodel.AuthBoundOpen).Error
//
//		if err != nil {
//			return err
//		}
//
//		return nil
//	})
//
//	if err != nil {
//		log.Error("BindPhoneAuth Commit Error:", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// ChangePhoneAuth 更改手机验证
//func ChangePhoneAuth(orm *gorm.DB, userId int, area string, phone string) error {
//	// updateUser := `UPDATE ad_user SET area = $1, phone = $2 WHERE id = $3`
//	// updateUserinfo := `UPDATE ad_userinfo SET securityupdatetime = $1 WHERE userid = $2`
//	user := models.AdUser{}
//	user.Id = userId
//
//	err := orm.Transaction(func(tx *gorm.DB) error {
//		err := orm.Model(user).Updates(map[string]interface{}{"area": area, "phone": phone}).Error
//
//		if err != nil {
//			return err
//		}
//
//		err = orm.Model(models.AdUserInfo{}).Where("user_id =?", userId).Update("security_update_time", time.Now()).Error
//
//		if err != nil {
//			return err
//		}
//
//		return nil
//	})
//
//	if err != nil {
//		log.Error("Commit Error:", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// ClosePhoneAuth 关闭手机验证
//func ClosePhoneAuth(orm *gorm.DB, userId int) error {
//
//	// updateSql := `UPDATE ad_userinfo SET phoneauthisopen = $1, securityupdatetime = $2 WHERE userid = $3`
//	user := models.AdUser{}
//	user.Id = userId
//
//	if err := orm.Model(user).Updates(map[string]interface{}{"phone_auth_is_open": sysmodel.AuthBoundClose, "security_update_time": time.Now()}).Error; err != nil {
//		log.Error("ClosePhoneAuth failed", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// BindEmailAuth 绑定邮箱验证
//func BindEmailAuth(orm *gorm.DB, userId int, email string) error {
//	// updateUser := `UPDATE ad_user SET useremail = $1 WHERE id = $2`
//	// updateUserinfo := `UPDATE ad_userinfo SET emailauthisopen = $1 WHERE userid = $2`
//	user := models.LineUser{}
//	user.Id = userId
//
//	err := orm.Transaction(func(tx *gorm.DB) error {
//		err := orm.Model(user).Updates(map[string]interface{}{"user_email": email}).Error
//
//		if err != nil {
//			return err
//		}
//
//		err = orm.Model(models.AdUserInfo{}).Where("user_id =?", userId).Update("email_auth_is_open", sysmodel.AuthBoundOpen).Error
//
//		if err != nil {
//			return err
//		}
//
//		return nil
//	})
//
//	if err != nil {
//		log.Error("BindEmailAuth Commit Error:", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// ChangeEmailAuth 更改邮箱验证
//func ChangeEmailAuth(orm *gorm.DB, userId int, email string) error {
//	// updateUser := `UPDATE ad_user SET useremail = $1 WHERE id = $2`
//	// updateUserinfo := `UPDATE ad_userinfo SET securityupdatetime = $1 WHERE userid = $2`
//	user := models.AdUser{}
//	user.Id = userId
//
//	err := orm.Transaction(func(tx *gorm.DB) error {
//		err := orm.Model(user).Update("user_email", email).Error
//
//		if err != nil {
//			return err
//		}
//
//		err = orm.Model(models.AdUserInfo{}).Where("user_id =?", userId).Update("security_update_time", time.Now()).Error
//
//		if err != nil {
//			return err
//		}
//
//		return nil
//	})
//
//	if err != nil {
//		log.Error("ChangeEmailAuth Commit Error:", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// CloseEmailAuth 关闭邮箱验证
//func CloseEmailAuth(orm *gorm.DB, userId int) error {
//	userInfo := models.AdUserInfo{}
//
//	// updateSql := `UPDATE ad_userinfo SET emailauthisopen = $1, securityupdatetime = $2 WHERE userid = $3`
//	if err := orm.Model(userInfo).Where("user_id =?", userId).Updates(map[string]interface{}{
//		"email_auth_is_open": sysmodel.AuthBoundClose, "security_update_time": time.Now()}).Error; err != nil {
//		log.Error("CloseEmailAuth failed", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// OpenGoogleAuth 开启 Google 验证
//func OpenGoogleAuth(orm *gorm.DB, userId int) error {
//	updateSql := `UPDATE ad_user_info SET google_idcard_is_open = ?, google_secret = googlesecret1 WHERE user_id = ?`
//	if err := orm.Exec(updateSql, sysmodel.AuthBoundOpen, userId).Error; err != nil {
//		log.Error("OpenGoogleAuth failed", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
////// ChangeGoogleAuth 更改 Google 验证
////func ChangeGoogleAuth(userId int) (err error) {
////
////	updateSql := `UPDATE ad_userinfo SET googlesecret = googlesecret1 WHERE userid = $1`
////	if _, err = dbhelper.MasterPgdb.Exec(updateSql, userId); err != nil {
////		log.Error("ChangeGoogleAuth failed", zap.Error(err))
////	}
////
////	return err
////}
//
//// CloseGoogleAuth 关闭 Google 验证
//func CloseGoogleAuth(orm *gorm.DB, userId int) error {
//
//	// updateSql := `UPDATE ad_userinfo SET googleidcardisopen = $1, securityupdatetime = $2 WHERE userid = $3`
//	if err := orm.Model(models.AdUserInfo{}).Where("user_id=?", userId).Updates(map[string]interface{}{
//		"google_idcard_is_open": sysmodel.AuthBoundClose, "security_update_time": time.Now()}).Error; err != nil {
//		log.Error("CloseGoogleAuth failed", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// GetNewGoogleSecret 获取新谷歌秘钥
//func GetNewGoogleSecret(orm *gorm.DB, userID int) (string, error) {
//	secret := struct {
//		NewSecret string `gorm:"googlesecret1"`
//	}{}
//
//	err := orm.Model(models.AdUserInfo{}).Where("user_id=?", userID).First(secret).Error
//
//	if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
//		log.Error("CloseGoogleAuth failed", zap.Error(err))
//		return "", err
//	}
//
//	return secret.NewSecret, nil
//}
//
//// TemporaryStorageSecret 临时存储更改的 Secret
//func TemporaryStorageSecret(orm *gorm.DB, userId int, secret string) error {
//
//	// sql := `UPDATE ad_userinfo SET googlesecret1 = $1 WHERE userid = $2`
//	if err := orm.Model(models.AdUserInfo{}).Where("user_id=?", userId).Update("googlesecret1", secret).Error; err != nil {
//		log.Error("TemporaryStorageSecret failed", zap.Error(err))
//		return err
//	}
//
//	return nil
//}
//
//// ALLInvite 累计邀请人数
//func ALLInvite(orm *gorm.DB, userId int) (count int) {
//	// sql := `SELECT totalnum FROM ad_userinfo WHERE userid = $1`
//	if err := orm.Model(models.AdUserInfo{}).Where("user_id=?", userId).Select("total_num").First(&count).Error; err != nil {
//		log.Error("get userinfo", zap.Error(err))
//		return count
//	}
//	return
//}
//
//// ThisMonthInvite 本月邀请
//func ThisMonthInvite(orm *gorm.DB, userId int) (count int) {
//	// sql := `SELECT count(*) FROM ad_userinfo WHERE recommenid = $1 AND  createtime BETWEEN (now() - INTERVAL '30 days') AND now()`
//	var total int64
//
//	if err := orm.Model(models.AdUserInfo{}).Where("recommen_id=? AND created_at BETWEEN (now() - INTERVAL '30 days') AND now()").Count(&total).Error; err != nil {
//		log.Error("get userinfo", zap.Error(err))
//		return count
//	}
//
//	count = int(total)
//	return
//}
//
//// InviteNum 总邀请人数
//func InviteNum(orm *gorm.DB, userId int) (count int) {
//	// sql := `SELECT count(*) FROM ad_userinfo WHERE recommenid = $1`
//	var total int64
//
//	if err := orm.Model(models.AdUserInfo{}).Where("recommen_id=?", userId).Count(&total).Error; err != nil {
//		log.Error("get userinfo", zap.Error(err))
//		return count
//	}
//
//	count = int(total)
//	return
//}
//
//// UpdateUserTransferOpen 更新内部转账开关
//func UpdateUserTransferOpen(orm *gorm.DB, userId, transferOpen int) error {
//	// updateSql := `UPDATE ad_userinfo SET transferopen = $1 WHERE userid = $2`
//	if err := orm.Model(models.AdUserInfo{}).Where("user_id=?", userId).Update("transfer_open", transferOpen).Error; err != nil {
//		log.Error("UpdateUserTransferOpen  failed", zap.Error(err))
//		return err
//	}
//	return nil
//}
//
//// UpdateUserTransferStatus 更新内部划转开关
//func UpdateUserTransferStatus(orm *gorm.DB, userid, transferStatus int) error {
//	// sql := `UPDATE ad_user SET transferstatus = $1 WHERE id = $2`
//	user := models.AdUser{}
//	user.Id = userid
//
//	if err := orm.Model(user).Update("transfer_status", transferStatus).Error; err != nil {
//		log.Error("UpdateUserTransferStatus  failed", zap.Error(err))
//		return err
//	}
//	return nil
//}
