package repository

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

// PermissionFilter 權限查詢過濾條件
type PermissionFilter struct {
	Type     *permission.Type
	Status   *permission.RecordState
	ParentID *int64
}

// RolePermissionRepository 角色權限關聯 Repository 介面
type RolePermissionRepository interface {
	// Create 建立角色權限關聯
	Create(ctx context.Context, roleID int64, permissionIDs []int64) error
	// Update 更新角色權限關聯 (先刪除再建立)
	Update(ctx context.Context, roleID int64, permissionIDs []int64) error
	// Delete 刪除角色的所有權限
	Delete(ctx context.Context, roleID int64) error
	// GetByRoleID 取得角色的所有權限關聯
	GetByRoleID(ctx context.Context, roleID int64) ([]*entity.RolePermission, error)
	// GetByRoleIDs 批量取得多個角色的權限關聯 (優化 N+1 查詢)
	GetByRoleIDs(ctx context.Context, roleIDs []int64) (map[int64][]*entity.RolePermission, error)
	// GetByPermissionIDs 根據權限 ID 取得所有角色關聯
	GetByPermissionIDs(ctx context.Context, permissionIDs []int64) ([]*entity.RolePermission, error)
	// GetRolesByPermission 根據權限 ID 取得所有角色 ID
	GetRolesByPermission(ctx context.Context, permissionID int64) ([]int64, error)
}
