package controller

import (
	"errors"

	"git.huangwc.com/pig/pig-farm-controller/internal/infra/models"

	"github.com/labstack/echo/v4"
)

var (
	// ErrUserNotFoundInContext 表示在 context 中未找到用户信息。
	ErrUserNotFoundInContext = errors.New("context中未找到用户信息")
	// ErrInvalidUserType 表示从 context 中获取的用户信息类型不正确。
	ErrInvalidUserType = errors.New("context中用户信息类型不正确")
)

// GetOperatorIDFromContext 从 echo.Context 中提取操作者ID。
// 假设操作者ID是由 AuthMiddleware 存储到 context 中的 *models.User 对象的 ID 字段。
func GetOperatorIDFromContext(c echo.Context) (uint32, error) {
	userVal := c.Get(models.ContextUserKey.String())
	if userVal == nil {
		return 0, ErrUserNotFoundInContext
	}

	user, ok := userVal.(*models.User)
	if !ok {
		return 0, ErrInvalidUserType
	}

	return user.ID, nil
}

// GetOperatorFromContext 从 echo.Context 中提取操作者。
// 假设操作者是由 AuthMiddleware 存储到 context 中的 *models.User 对象的字段。
func GetOperatorFromContext(c echo.Context) (*models.User, error) {
	userVal := c.Get(models.ContextUserKey.String())
	if userVal == nil {
		return nil, ErrUserNotFoundInContext
	}

	user, ok := userVal.(*models.User)
	if !ok {
		return nil, ErrInvalidUserType
	}

	return user, nil
}
