package controllers

import (
	"github.com/tiptok/gocomm/pkg/log"
	"gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/application/auth/command"
	"gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/application/auth/query"
	"gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/application/auth/service"
	"gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol"
)

type AuthController struct {
	BaseController
}

// Login
// 登录
func (controller *AuthController) Login() {
	var (
		msg     *protocol.ResponseMessage
		svr     = service.NewAuthService(nil)
		request *command.LoginRequest
	)
	defer func() {
		controller.Resp(msg)
	}()
	if err := controller.JsonUnmarshal(&request); err != nil {
		msg = protocol.NewResponseMessage(2, err.Error())
		return
	}
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.Login(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// Logout
// 测试
func (controller *AuthController) Logout() {
	var (
		msg     *protocol.ResponseMessage
		svr     = service.NewAuthService(nil)
		request *command.LogoutRequest
	)
	defer func() {
		controller.Resp(msg)
	}()
	if err := controller.JsonUnmarshal(&request); err != nil {
		msg = protocol.NewResponseMessage(2, "")
		return
	}
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.Logout(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// Refresh
// 权限刷新
func (controller *AuthController) Refresh() {
	var (
		msg     *protocol.ResponseMessage
		svr     = service.NewAuthService(nil)
		request = &command.RefreshRequest{}
	)
	defer func() {
		controller.Resp(msg)
	}()

	if err := controller.JsonUnmarshal(request); err != nil {
		msg = protocol.NewResponseMessage(2, err.Error())
		return
	}

	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.Refresh(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// Profile
// 获取当前用户数据
func (controller *AuthController) Profile() {
	var (
		msg     *protocol.ResponseMessage
		svr     = service.NewAuthService(nil)
		request = &command.ProfileRequest{}
	)
	defer func() {
		controller.Resp(msg)
	}()
	header := controller.GetRequestHeader(controller.Ctx)
	request.UserId = header.UserId
	data, err := svr.Profile(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// CaptchaInit
// 图形验证码初始化
func (controller *AuthController) CaptchaInit() {
	var (
		msg     *protocol.ResponseMessage
		svr     = service.NewAuthService(nil)
		request = &query.CaptchaInitRequest{}
	)
	defer func() {
		controller.Resp(msg)
	}()
	request.UserIp = controller.Ctx.Input.IP()
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.CaptchaInit(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// ChangePassword
// 修改密码
func (controller *AuthController) ChangePassword() {
	var (
		msg     *protocol.ResponseMessage
		svr     = service.NewAuthService(nil)
		request *command.ChangePasswordRequest
	)
	defer func() {
		controller.Resp(msg)
	}()
	if err := controller.JsonUnmarshal(&request); err != nil {
		msg = protocol.NewResponseMessage(2, "")
		return
	}
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.ChangePassword(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}