using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace TeamAAS_VP.Interfaces
{
///
/// MES 通信服务接口。
/// 提供通过配置的 URL 发起 GET 请求的抽象,用于执行过站(Station)与提交结果(Submit)操作。
/// 实现者应负责管理内部 HTTP 客户端或通信资源,并在 Dispose 中释放这些资源。
///
public interface IMesService : IDisposable
{
///
/// 使用配置的过站(Station)URL 发起 GET 请求,携带序列号(sn)作为查询参数进行过站。
///
/// 要过站的产品序列号,不能为空或空白。
/// 用于在外部请求取消时中止异步请求的 。默认值为 。
///
/// 一个包含请求结果的元组:
/// IsSuccess 表示请求并解析 MES 响应是否被认为成功(由实现定义,例如 HTTP 200 且业务状态正常)。
/// Response 为 MES 返回的原始响应字符串或描述错误的信息(不为 null,可为空字符串)。
///
///
/// - 实现应从配置中读取过站 URL 并将 sn 作为查询参数附加到 URL。
/// - 实现应尊重 ,在取消时尽早抛出 或返回失败结果。
/// - 若 无效,应抛出 或 。
///
Task<(bool IsSuccess, string Response)> StationGetAsync(int deviceNo, string sn, string comp, CancellationToken cancellationToken = default);
Task<(bool IsSuccess, string Response)> StationGetExAsync(string sn, string comp, double timeoutInSeconds);
///
/// 使用配置的过站(Station)URL 发起 GET 请求,携带序列号(sn)作为查询参数进行过站,并使用指定的超时时间(秒)。
///
/// 要过站的产品序列号,不能为空或空白。
/// 请求超时时间,单位为秒。应为正数;实现可以将其应用到 HTTP 客户端或请求级别超时。
///
/// 一个包含请求结果的元组:
/// IsSuccess 表示请求并解析 MES 响应是否被认为成功。
/// Response 为 MES 返回的原始响应字符串或描述错误的信息。
///
///
/// - 此重载方便在不使用 的场景中指定超时时间。
/// - 实现应验证 为合理值(例如 > 0),否则可抛出 。
///
Task<(bool IsSuccess, string Response)> StationGetAsync(int deviceNo, string sn, string comp, double timeoutInSeconds);
///
/// 过站请求的扩展版本,允许同时指定 和超时时间(秒)。实现应优先考虑取消请求,但在未取消的情况下应用超时。
///
///
///
///
///
Task<(bool IsSuccess, string Response)> StationGetExAsync(int deviceNo, string sn, string comp, double timeoutInSeconds);
///
/// 使用配置的过站(Station)URL 发起 GET 请求,携带序列号(sn)作为查询参数进行过站,并使用指定的超时时间(秒)。
///
/// 要过站的产品序列号,不能为空或空白。
/// 请求超时时间,单位为秒。应为正数;实现可以将其应用到 HTTP 客户端或请求级别超时。
///
/// 一个包含请求结果的元组:
/// IsSuccess 表示请求并解析 MES 响应是否被认为成功。
/// Response 为 MES 返回的原始响应字符串或描述错误的信息。
///
///
/// - 此重载方便在不使用 的场景中指定超时时间。
/// - 实现应验证 为合理值(例如 > 0),否则可抛出 。
///
Task<(bool IsSuccess, string Response)> StationGetAsync(string sn, string comp, double timeoutInSeconds);
///
/// 使用配置的提交(Submit)URL 发起 GET 请求,提交过站结果及时间信息。
///
/// 待提交的产品序列号,不能为空或空白。
/// 表示该序列号对应的过站是否成功(业务层面的成功标志)。
/// 过程开始时间(本地时间或 UTC,取决于与 MES 的约定)。实现方应按与 MES 约定的时区/格式发送。
/// 过程结束时间,语义同 。
/// 用于在外部请求取消时中止异步请求的 。默认值为 。
///
/// 一个包含请求结果的元组:
/// IsSuccess 表示提交请求及解析 MES 响应是否被认为成功。
/// Response 为 MES 返回的原始响应字符串或描述错误的信息。
///
///
/// - 实现应将时间参数按 MES 要求格式化为查询字符串或适当的请求参数。
/// - 若 晚于 ,实现应记录并视情况返回失败或抛出异常。
/// - 实现应尊重 ,并在取消时尽早中止请求。
///
Task<(bool IsSuccess, string Response)> SubmitGetAsync(int deviceNo, string sn, string comp, string torque, string pressure, string turn, bool isSuccess, DateTime start_time, DateTime stop_time, CancellationToken cancellationToken = default);
///
/// 使用配置的提交(Submit)URL 发起 GET 请求,提交过站结果及时间信息。
///
/// 待提交的产品序列号,不能为空或空白。
/// 表示该序列号对应的过站是否成功(业务层面的成功标志)。
/// 过程开始时间(本地时间或 UTC,取决于与 MES 的约定)。实现方应按与 MES 约定的时区/格式发送。
/// 过程结束时间,语义同 。
/// 用于在外部请求取消时中止异步请求的 。默认值为 。
///
/// 一个包含请求结果的元组:
/// IsSuccess 表示提交请求及解析 MES 响应是否被认为成功。
/// Response 为 MES 返回的原始响应字符串或描述错误的信息。
///
///
/// - 实现应将时间参数按 MES 要求格式化为查询字符串或适当的请求参数。
/// - 若 晚于 ,实现应记录并视情况返回失败或抛出异常。
/// - 实现应尊重 ,并在取消时尽早中止请求。
///
Task<(bool IsSuccess, string Response)> SubmitGetAsync(string sn, string comp, Dictionary data, bool isSuccess, DateTime start_time, DateTime stop_time, CancellationToken cancellationToken = default);
Task<(bool IsSuccess, string Response)> SubmitGetExAsync(string sn, string comp, Dictionary data, List results, DateTime start_time, DateTime stop_time, CancellationToken cancellationToken = default);
///
/// 使用配置的提交(Submit)URL 发起 GET 请求,提交过站结果及时间信息,并使用指定的超时时间(秒)。
///
/// 待提交的产品序列号,不能为空或空白。
/// 表示该序列号对应的过站是否成功。
/// 过程开始时间。
/// 过程结束时间。
/// 请求超时时间,单位为秒。应为正数。
///
/// 一个包含请求结果的元组:
/// IsSuccess 指示提交是否被认为成功。
/// Response 包含 MES 的原始响应或错误信息。
///
///
/// - 此重载用于在不传入 的场景中指定超时时间。
/// - 实现应确保对时间参数与布尔参数进行适当的 URL 编码或格式化。
///
Task<(bool IsSuccess, string Response)> SubmitGetAsync(int deviceNo, string sn, string comp, string torque, string pressure, string turn, bool isSuccess, DateTime start_time, DateTime stop_time, double timeoutInSeconds);
///
/// 获取服务器当前时间
///
///
///
///
Task<(bool IsSuccess, DateTime Now)> GetServerTimeAsync(int deviceNo, string sn, double timeoutInSeconds);
///
/// 上传ftp
///
///
///
///
///
Task<(bool IsSuccess, string Response)> SendFtpFileAsync(string sn, string name, CancellationToken cancellationToken = default);
}
}