package usecase

import (
	"backend/pkg/permission/domain/permission"
	"context"
)

// UserRoleUseCase 使用者角色業務邏輯介面
type UserRoleUseCase interface {
	// Assign 指派角色給使用者
	Assign(ctx context.Context, req AssignRoleRequest) (*UserRoleResponse, error)

	// Update 更新使用者角色
	Update(ctx context.Context, userUID, roleUID string) (*UserRoleResponse, error)

	// Remove 移除使用者角色
	Remove(ctx context.Context, userUID string) error

	// Get 取得使用者角色
	Get(ctx context.Context, userUID string) (*UserRoleResponse, error)

	// GetByRole 取得角色的所有使用者
	GetByRole(ctx context.Context, roleUID string) ([]*UserRoleResponse, error)

	// List 列出所有使用者角色
	List(ctx context.Context, filter UserRoleFilterRequest) ([]*UserRoleResponse, error)
}

// AssignRoleRequest 指派角色請求
type AssignRoleRequest struct {
	UserUID string `json:"user_uid" binding:"required"`
	RoleUID string `json:"role_uid" binding:"required"`
	Brand   string `json:"brand"`
}

// UserRoleFilterRequest 使用者角色查詢過濾請求
type UserRoleFilterRequest struct {
	Brand  string                  `json:"brand"`
	RoleID string                  `json:"role_id"`
	Status *permission.RecordState `json:"status"`
}

// UserRoleResponse 使用者角色回應
type UserRoleResponse struct {
	UserUID    string `json:"user_uid"`
	RoleUID    string `json:"role_uid"`
	Brand      string `json:"brand"`
	CreateTime string `json:"create_time"`
	UpdateTime string `json:"update_time"`
}
