package controllers

import (
	"github.com/tiptok/gocomm/pkg/log"
	"gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/application/user"
	"gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol"
	protocolx "gitlab.fjmaimaimai.com/mmm-go/godevp/pkg/protocol/user"
)

type UserController struct {
	BaseController
}

// CreateUser
// CreateUser execute command  create  User
func (controller *UserController) CreateUser() {
	var (
		msg     *protocol.ResponseMessage
		svr     = user.NewUserService(nil)
		request *protocolx.CreateUserRequest
	)
	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.CreateUser(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// UpdateUser
// UpdateUser execute command  update  User
func (controller *UserController) UpdateUser() {
	var (
		msg     *protocol.ResponseMessage
		svr     = user.NewUserService(nil)
		request *protocolx.UpdateUserRequest
	)
	defer func() {
		controller.Resp(msg)
	}()
	if err := controller.JsonUnmarshal(&request); err != nil {
		msg = protocol.NewResponseMessage(2, "")
		return
	}
	request.Id, _ = controller.GetInt64(":userId")
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.UpdateUser(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// GetUser
// GetUser execute query  get  User
func (controller *UserController) GetUser() {
	var (
		msg     *protocol.ResponseMessage
		svr     = user.NewUserService(nil)
		request = &protocolx.GetUserRequest{}
	)
	defer func() {
		controller.Resp(msg)
	}()
	request.Id, _ = controller.GetInt64(":userId")
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.GetUser(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// DeleteUser
// DeleteUser execute command  delete  User
func (controller *UserController) DeleteUser() {
	var (
		msg     *protocol.ResponseMessage
		svr     = user.NewUserService(nil)
		request = &protocolx.DeleteUserRequest{}
	)
	defer func() {
		controller.Resp(msg)
	}()
	request.Id, _ = controller.GetInt64(":userId")
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.DeleteUser(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageData(data, err)
}

// ListUser
// ListUser execute query  list  User
func (controller *UserController) ListUser() {
	var (
		msg     *protocol.ResponseMessage
		svr     = user.NewUserService(nil)
		request = &protocolx.ListUserRequest{}
	)
	defer func() {
		controller.Resp(msg)
	}()
	request.PageNumber, _ = controller.GetInt("pageNumber")
	request.PageSize, _ = controller.GetInt("pageSize")
	request.SearchByText = controller.GetString("searchByText")
	header := controller.GetRequestHeader(controller.Ctx)
	data, err := svr.ListUser(header, request)
	if err != nil {
		log.Error(err)
	}
	msg = protocol.NewResponseMessageListData(data, err)
}