package top.r3944realms.docchecktoolrefactored.model;

import java.util.Collections;
import java.util.List;
import java.util.Objects;

/**
 * The type Duplicate group.
 *
 * @param hash      文件内容哈希值
 * @param size      文件大小（字节）
 * @param fileMetas 关联的元数据列表
 */
public record DuplicateGroup(String hash, long size, List<FileMetadata> fileMetas) {

    /**
     * Instantiates a new Duplicate group.
     *
     * @param hash      the hash
     * @param size      the size
     * @param fileMetas the file metas
     */
// 紧凑构造方法验证数据
    public DuplicateGroup {
         Objects.requireNonNull(hash);
         Objects.requireNonNull(fileMetas);
        fileMetas = Collections.unmodifiableList(fileMetas);
    }

    /**
     * Is real duplicate boolean.
     *
     * @return the boolean
     */
    public boolean isRealDuplicate() {
        return fileMetas.size() > 1; // 是否真实重复（至少两个文件）
    }

    /**
     * Total wasted space long.
     *
     * @return the long
     */
    public long totalWastedSpace() {
        return size * (fileMetas.size() - 1); // 浪费空间大小
    }

}
