package usecase

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

// RoleUseCase 角色業務邏輯介面
type RoleUseCase interface {
	// Create 建立角色
	Create(ctx context.Context, req CreateRoleRequest) (*RoleResponse, error)
	// Update 更新角色
	Update(ctx context.Context, uid string, req UpdateRoleRequest) (*RoleResponse, error)
	// Delete 刪除角色
	Delete(ctx context.Context, uid string) error
	// Get 取得角色
	Get(ctx context.Context, uid string) (*RoleResponse, error)
	// List 列出所有角色
	List(ctx context.Context, filter RoleFilterRequest) ([]*RoleResponse, error)
	// Page 分頁查詢角色
	Page(ctx context.Context, filter RoleFilterRequest, page, size int) (*RolePageResponse, error)
}

// CreateRoleRequest 建立角色請求
type CreateRoleRequest struct {
	ClientID    int                    `json:"client_id" binding:"required"`
	Name        string                 `json:"name" binding:"required"`
	Permissions permission.Permissions `json:"permissions"`
}

// UpdateRoleRequest 更新角色請求
type UpdateRoleRequest struct {
	Name        *string                 `json:"name"`
	Status      *permission.RecordState `json:"status"`
	Permissions permission.Permissions  `json:"permissions"`
}

// RoleFilterRequest 角色查詢過濾請求
type RoleFilterRequest struct {
	ClientID    int                     `json:"client_id"`
	Name        string                  `json:"name"`
	Status      *permission.RecordState `json:"status"`
	Permissions []string                `json:"permissions"`
}

// RoleResponse 角色回應
type RoleResponse struct {
	ID          string                 `json:"id"`
	UID         string                 `json:"uid"`
	ClientID    int                    `json:"client_id"`
	Name        string                 `json:"name"`
	Status      permission.RecordState `json:"status"`
	Permissions permission.Permissions `json:"permissions"`
	CreateTime  string                 `json:"create_time"`
	UpdateTime  string                 `json:"update_time"`
}

// RoleWithUserCountResponse 角色回應 (含使用者數量)
type RoleWithUserCountResponse struct {
	RoleResponse
	UserCount int `json:"user_count"`
}

// RolePageResponse 角色分頁回應
type RolePageResponse struct {
	List  []*RoleWithUserCountResponse `json:"list"`
	Total int64                        `json:"total"`
	Page  int                          `json:"page"`
	Size  int                          `json:"size"`
}
