#pragma once

#include "rm_control/common/result.h"

#include <filesystem>
#include <string>

namespace rm_control::modules::trajectory {

/**
 * @brief 流式计算文件的 SHA-256 十六进制校验值。
 *
 * @reason 原始轨迹可能较大，流式摘要可以避免把完整文件加载到内存，并为只读原始产物提供可复核的完整性证据。
 *
 * @author 唐永康
 * @date 2026-07-10
 *
 * @param file_path 待校验的普通文件路径；路径必须存在且不能是目录。
 * @return 成功时返回 64 个小写十六进制字符，失败时返回带路径上下文的错误信息。
 *
 * @calls OpenSSL EVP_DigestInit_ex、EVP_DigestUpdate 和 EVP_DigestFinal_ex。
 * @safety 只读取本地文件，不连接机械臂，也不会触发任何硬件动作。
 * @note 文件在摘要计算期间不得被其他进程修改，否则调用方应重新计算并校验。
 */
common::Result<std::string> CalculateFileSha256(const std::filesystem::path &file_path);

} // namespace rm_control::modules::trajectory
