package controllers

import (
	"fmt"
	"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/application/user"
	"gitlab.fjmaimaimai.com/mmm-go/partner/pkg/protocol"
	"strings"
)

type UserController struct {
	BaseController
}

//UserInfo
//@router /userInfo [post]
func (this *UserController) UserInfo() {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(msg)
	}()
	var request *protocol.UserInfoRequest
	if err := this.JsonUnmarshal(&request); err != nil {
		msg = protocol.BadRequestParam(2)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	header := this.GetRequestHeader(this.Ctx)
	msg = protocol.NewReturnResponse(user.UserInfo(header, request))
}

//CheckSmsCode
// @router /checkSmsCode [post]
func (this *UserController) CheckSmsCode() {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(msg)
	}()
	var request *protocol.CheckSmsCodeRequest
	if err := this.JsonUnmarshal(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	header := this.GetRequestHeader(this.Ctx)
	msg = protocol.NewReturnResponse(user.CheckSmsCode(header, request))
}

//ChangePhone
// @router /changePhone [post]
func (this *UserController) ChangePhone() {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(msg)
	}()
	var request *protocol.ChangePhoneRequest
	if err := this.JsonUnmarshal(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	if !CacheSms.IsExist(request.OldPhone) {
		msg = protocol.NewMesage(1009) //验证码失效
		return
	}
	if v := CacheSms.Get(request.OldPhone); v != nil {
		if !strings.EqualFold(fmt.Sprintf("%v", v), strings.TrimSpace(request.CaptchaCertificate)) {
			msg = protocol.NewMesage(1012) //验证码不一致
			return
		}
		CacheSms.Delete(request.OldPhone)
	}
	header := this.GetRequestHeader(this.Ctx)
	msg = protocol.NewReturnResponse(user.ChangePhone(header, request))
}

//ResetPassword
// @router /resetPassword [post]
func (this *UserController) ResetPassword() {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(msg)
	}()
	var request *protocol.ResetPasswordRequest
	if err := this.JsonUnmarshal(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	if !CacheSms.IsExist(request.Phone) {
		msg = protocol.NewMesage(1009) //验证码失效
		return
	}
	if v := CacheSms.Get(request.Phone); v != nil {
		if !strings.EqualFold(fmt.Sprintf("%v", v), strings.TrimSpace(request.CaptchaCertificate)) {
			msg = protocol.NewMesage(1012) //验证码不一致
			return
		}
		CacheSms.Delete(request.Phone)
	}
	header := this.GetRequestHeader(this.Ctx)
	msg = protocol.NewReturnResponse(user.ResetPassword(header, request))
}

//ChangePassword
// @router /changePassword [post]
func (this *UserController) ChangePassword() {
	var msg *protocol.ResponseMessage
	defer func() {
		this.Resp(msg)
	}()
	var request *protocol.ChangePasswordRequest
	if err := this.JsonUnmarshal(&request); err != nil {
		msg = protocol.BadRequestParam(1)
		return
	}
	if b, m := this.Valid(request); !b {
		msg = m
		return
	}
	header := this.GetRequestHeader(this.Ctx)
	msg = protocol.NewReturnResponse(user.ChangePassword(header, request))
}