package com.njcn.rdms.module.project.service.project.permission;

import java.util.Set;

/**
 * 数据可见性 scope，由 VisibilityScopeResolver 计算得出。
 * - seesAll=true：项目经理等"看全部"角色，分页/计数 SQL 跳过任何 ID 过滤
 * - seesAll=false：仅命中 executionIds / taskIds 的数据可见；集合为空 = 完全不可见
 *
 * 实例不可变；空集合用 Set.of() 表达，调用方不得修改。
 */
public record VisibilityScope(
        boolean seesAll,
        Set<Long> executionIds,
        Set<Long> taskIds
) {

    public static VisibilityScope all() {
        return new VisibilityScope(true, Set.of(), Set.of());
    }

    public static VisibilityScope of(Set<Long> executionIds, Set<Long> taskIds) {
        return new VisibilityScope(false,
                executionIds == null ? Set.of() : Set.copyOf(executionIds),
                taskIds == null ? Set.of() : Set.copyOf(taskIds));
    }

    public static VisibilityScope empty() {
        return new VisibilityScope(false, Set.of(), Set.of());
    }
}
