using System;
using System.Collections.Generic;
using TeamAAS_VP.Enums;
using TeamAAS_VP.Models.Calibration;
namespace TeamAAS_VP.Interfaces
{
///
/// 校准信息管理(CRUD)接口。
/// 提供对应用中校准数据的获取、添加/更新、删除以及持久化操作的抽象。
/// 实现应负责数据存储细节(内存、文件、数据库等),并在 Dispose 中释放任何非托管资源或订阅。
///
public interface ICalibrationService : IDisposable
{
///
/// 获取所有已知的校准信息的只读集合。
///
///
/// 包含当前所有校准项的只读集合;集合本身不能为空,但可以为空集合。
/// 集合的实现应保证对调用者只读(不应暴露可变集合引用)。
///
IReadOnlyCollection GetAllCalibrations();
///
/// 根据标识符获取单个校准信息。
///
/// 要查找的校准信息的唯一标识符()。
///
/// 对应的 实例;若不存在则返回 null。
///
CalibrationInfo GetCalibration(Guid id);
///
/// 添加新的校准信息或更新已有的校准信息。
///
/// 要添加或更新的校准信息对象;其 内部应包含用于识别的标识字段。
///
/// 添加或更新后存储的 实例(可能包含由存储层填充的字段,如创建时间、标识等)。
/// 实现应保证返回的对象反映当前持久化状态。
///
///
/// 调用方应负责验证传入对象的有效性(例如必填字段),实现也可在内部进行额外验证并抛出相应异常。
///
CalibrationInfo AddOrUpdateCalibration(CalibrationInfo calib);
///
/// 删除指定标识符对应的校准信息。
///
/// 要删除的校准信息的唯一标识符()。
///
/// 如果找到并成功删除则返回 true;如果未找到该标识或删除失败则返回 false。
///
bool RemoveCalibration(Guid id);
// 文件加载/保存
///
/// 从持久化存储加载所有校准信息并替换当前内存中的集合。
///
///
/// 实现应在加载失败时记录错误或抛出异常;若为耗时操作,调用方应在合适的线程/任务中调用本方法。
/// 方法语义为同步加载;如需异步支持,可在实现中提供额外的异步方法。
///
void LoadAll();
///
/// 将当前内存中的所有校准信息保存到持久化存储。
///
///
/// 实现应保证原子性或在文档中说明保存策略;若为耗时操作,调用方应在合适的线程/任务中调用本方法。
///
void SaveAll();
///
/// 校准转换,将像素坐标转换位置坐标
///
///
///
///
///
(bool IsSucceed, double X, double Y, double U) ConvertPixelToPosition((double X, double Y,double angle) pixelCoord, double[] robotCoord, CalibrationInfo calib, RobotBrand robotBrand = RobotBrand.Default);
///
/// 校准转换,将像素坐标转换位置坐标
///
///
///
///
///
(bool IsSucceed, double X, double Y, double U) ConvertPixelToPosition((double X, double Y, double angle) pixelCoord, double[] robotCoord, Guid calibId, RobotBrand robotBrand = RobotBrand.Default);
}
}