package logic

import (
	"context"
	"fusenapi/model/gmodel"
	"fusenapi/utils/auth"

	"fusenapi/server/home-user-auth/internal/svc"
	"fusenapi/server/home-user-auth/internal/types"
	"fusenapi/utils/basic"

	"github.com/zeromicro/go-zero/core/logx"
	"gorm.io/gorm"
)

type UserSaveBasicInfoLogic struct {
	logx.Logger
	ctx    context.Context
	svcCtx *svc.ServiceContext
}

func NewUserSaveBasicInfoLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserSaveBasicInfoLogic {
	return &UserSaveBasicInfoLogic{
		Logger: logx.WithContext(ctx),
		ctx:    ctx,
		svcCtx: svcCtx,
	}
}

func (l *UserSaveBasicInfoLogic) UserSaveBasicInfo(req *types.RequestBasicInfoForm, userinfo *auth.UserInfo) (resp *basic.Response) {

	if !userinfo.IsUser() {
		return resp.SetStatus(basic.CodeUnAuth)
	}

	m := l.svcCtx.AllModels.FsUser
	err := m.UpdateUserBasicInfoById(l.ctx, userinfo.UserId, &gmodel.UserBasicInfoForSave{
		FirstName:            req.FirstName,
		LastName:             req.LastName,
		Mobile:               req.Mobile,
		Company:              req.Company,
		IsOrderStatusEmail:   req.IsOrderStatusEmail,
		IsEmailAdvertisement: req.IsEmailAdvertisement,
		IsOrderStatusPhone:   req.IsOrderStatusPhone,
		IsPhoneAdvertisement: req.IsPhoneAdvertisement,
		Type:                 req.Type,
		IsOpenRender:         req.IsOpenRender,
		IsLowRendering:       req.IsLowRendering,
		IsRemoveBg:           req.IsRemoveBg,
	})

	if err != nil {
		logx.Error(err)
		switch err {
		case gorm.ErrRecordNotFound:
			return resp.SetStatus(basic.CodeUserIdNotFoundErr)
		default:
			return resp.SetStatusWithMessage(basic.CodeDbUpdateErr, err.Error())
		}
	}

	return resp.SetStatus(basic.CodeOK)
}