package top.r3944realms.docchecktoolrefactored.core;

import java.io.IOException;
import java.nio.file.Path;

/**
 * 文件哈希计算策略接口
 */
public interface FileHashCalculator {
    /**
     * 计算文件哈希值
     * @param file 要计算的文件路径
     * @return 文件的哈希值字符串
     */
    String calculateHash(Path file) throws IOException;

    /**
     * 流式计算文件哈希值（适用于大文件）
     * @param file 要计算的文件路径
     * @return 文件的哈希值字符串
     */
    String calculateHashStreaming(Path file) throws IOException;

    /**
     * 计算文件部分hash值方法
     * @param file 要计算的文件路径
     * @param partialChunkSize 分块大小
     * @return 文件的哈希值字符串
     */
    String calculatePartialHash(Path file, int partialChunkSize) throws IOException;

    /**
     * 计算文件部分hash值方法（默认）
     * @param file 要计算的文件路径
     * @return 文件的哈希值字符串
     */
    default String calculatePartialHash(Path file) throws IOException {
        return calculatePartialHash(file, getPartialSize());
    }

    /**
     * 块大小
     * @return 块大小
     */
    default int getPartialSize() {
        return 4096;// 4KB
    }

    /**
     * 获取流式处理的缓冲区大小
     * @return 缓冲区大小
     */
    default int getStreamingBufferSize() {
        return 8192; // 8KB
    }

    /**
     * 默认实现使用MD5
     */
    static FileHashCalculator defaultInstance() {
        return new MD5HashCalculator();
    }
}
