package gmodel

import (
	"context"

	"gorm.io/gorm"
)

// TODO: 使用model的属性做你想做的

type UserBasicInfoForSave struct {
	ID                   uint   `gorm:"primary_key" json:"id"`
	FirstName            string `gorm:"-" json:"first_name"`
	LastName             string `gorm:"-" json:"last_name"`
	Mobile               string `gorm:"-" json:"mobile"`
	Company              string `gorm:"-" json:"company"`
	IsOrderStatusEmail   int64  `gorm:"-" json:"is_order_status_email"`
	IsEmailAdvertisement int64  `gorm:"-" json:"is_email_advertisement"`
	IsOrderStatusPhone   int64  `gorm:"-" json:"is_order_status_phone"`
	IsPhoneAdvertisement int64  `gorm:"-" json:"is_phone_advertisement"`
	Type                 int64  `gorm:"-" json:"type"`
	IsOpenRender         int64  `gorm:"-" json:"is_open_render"`
	IsLowRendering       int64  `gorm:"-" json:"is_low_rendering"`
	IsRemoveBg           int64  `gorm:"-" json:"is_remove_bg"`
}

func (u *FsUserModel) FindUserByEmail(ctx context.Context, emailname string) (resp FsUser, err error) {
	err = u.db.WithContext(ctx).Model(&FsUser{}).Where("`email` = ?", emailname).Take(&resp).Error
	return resp, err
}

func (u *FsUserModel) FindUserById(ctx context.Context, Id int64) (resp FsUser, err error) {
	err = u.db.WithContext(ctx).Model(&FsUser{}).Where("`id` = ? and is_del = ?", Id, 0).Take(&resp).Error
	return resp, err
}

func (u *FsUserModel) FindUserByGoogleId(ctx context.Context, Id int64) (resp *FsUser, err error) {
	err = u.db.WithContext(ctx).Model(resp).Where("`google_id` = ? and is_del = ?", Id, 0).Take(resp).Error
	return resp, err
}

func (u *FsUserModel) TransactionRegsterGoogle(ctx context.Context, fc func(tx *gorm.DB) error) (err error) {
	return u.db.WithContext(ctx).Transaction(fc)
}

func (u *FsUserModel) UpdateUserBasicInfoById(ctx context.Context, Id int64, user *UserBasicInfoForSave) (err error) {

	err = u.db.WithContext(ctx).Model(&FsUser{}).
		Where("`id` = ? and is_del = ? and status = ?", Id, 0, 1).
		Updates(map[string]interface{}{
			"first_name":             user.FirstName,
			"last_name":              user.LastName,
			"mobile":                 user.Mobile,
			"company":                user.Company,
			"is_order_status_email":  user.IsOrderStatusEmail,
			"is_email_advertisement": user.IsEmailAdvertisement,
			"is_order_status_phone":  user.IsOrderStatusPhone,
			"is_phone_advertisement": user.IsPhoneAdvertisement,
			"type":                   user.Type,
			"is_open_render":         user.IsOpenRender,
			"is_low_rendering":       user.IsLowRendering,
			"is_remove_bg":           user.IsRemoveBg,
		}).Error
	return err
}