package com.fs.course.support;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

/**
 * 看课项目等价关系：重粉判断时视为同一项目。
 */
public final class CourseProjectEquivalence {

    /** 项目 1 与 28 为同一业务项目 */
    private static final List<Long> PROJECT_GROUP_1_AND_28 = Collections.unmodifiableList(Arrays.asList(1L, 28L));

    private CourseProjectEquivalence() {
    }

    /**
     * 返回与给定项目 ID 等价的全部项目 ID（用于查询、判重）。
     */
    public static List<Long> equivalentProjectIds(Long projectId) {
        if (projectId == null || projectId == 0L) {
            return Collections.emptyList();
        }
        if (projectId.equals(1L) || projectId.equals(28L)) {
            return PROJECT_GROUP_1_AND_28;
        }
        return Collections.singletonList(projectId);
    }

    public static boolean isInProjectGroup1And28(Long projectId) {
        return projectId != null && (projectId.equals(1L) || projectId.equals(28L));
    }

    /**
     * 等价项目组的 canonical ID（取最小组内 ID，用于 fs_user_project_repeat 唯一键）。
     */
    public static Long canonicalProjectId(Long projectId) {
        List<Long> ids = equivalentProjectIds(projectId);
        if (ids.isEmpty()) {
            return projectId;
        }
        return ids.stream().min(Long::compareTo).orElse(projectId);
    }
}
