using DataSharing.Share.Dtos.Province.HuiJu;
using DataSharing.Share.Enums;
using Hotline.Share.Dtos.File;

namespace DataSharing.SendTask
{
    public interface IInitPushDataService
    {
        /// <summary>
        /// 组装工单受理数据
        /// </summary>
        /// <param name="orderId">工单编号</param>
        /// <param name="provinceNo">省编号</param>
        /// <param name="request">请求参数</param>
        /// <param name="requestData">请求参数</param>
        /// <param name="generationTime">生成时间（保存工单创建时间或者通话记录生成时间）</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<string> InitDsSendTaskSubmitCaseInfo(string orderId, string provinceNo, string request, SubmitCaseInfo requestData, DateTime? generationTime = null, CancellationToken cancellationToken = default);

        /// <summary>
        /// 组装服务工单处理过程
        /// </summary>
        /// <param name="provinceNo"></param>
        /// <param name="request">请求参数</param>
        /// <param name="requestData">请求参数</param>
        /// <param name="generationTime">生成时间（保存工单创建时间或者通话记录生成时间）</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<string> InitDsSendTaskSubmitCaseProcess(string provinceNo, string request, SubmitCaseProcessInfo requestData, DateTime? generationTime = null, CancellationToken cancellationToken = default);

        /// <summary>
        /// 组装电话记录
        /// </summary>
        /// <param name="provinceNo">省编号</param>
        ///  <param name="callId">通话记录ID</param>
        ///   <param name="callLogId">通话记录本地ID</param>
        /// <param name="request">请求参数</param>
        /// <param name="requestData">请求参数</param>
        /// <param name="generationTime">生成时间（保存工单创建时间或者通话记录生成时间）</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<string> InitDsSendTaskSubmitCaseRecord(string provinceNo, string callId, string callLogId, string request, SubmitCaseRecordInfo requestData, DateTime? generationTime = null, CancellationToken cancellationToken = default);

        /// <summary>
        /// 组装服务工单处理结果
        /// </summary>
        /// <param name="provinceNo"></param>
        /// <param name="request">请求参数</param>
        /// <param name="requestData">请求参数</param>
        /// <param name="generationTime">生成时间（保存工单创建时间或者通话记录生成时间）</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<string> InitDsSendTaskSubmitCaseResult(string provinceNo, string request, SubmitCaseResultInfo requestData, DateTime? generationTime = null, CancellationToken cancellationToken = default);

        /// <summary>
        /// 省平台其他业务推送任务数据
        /// </summary>
        /// <param name="taskType">任务类型</param>
        /// <param name="path">请求地址</param>
        /// <param name="provinceNo">省编号</param>
        /// <param name="request">请求参数</param>
        /// <param name="requestData">请求参数</param>
        /// <param name="httpMethod">请求方式</param>
        /// <param name="pathType">接口类型，汇聚、协同</param>
        /// <param name="fileJson">附件</param>
        /// <param name="generationTime">生成时间</param>
        /// <param name="visitTime">回访时间（只有回访才有数据）</param>
        /// <param name="subjectResultSatify">回访满意度（只有回访才有数据）</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<string> InitDsSendTaskProvinceOther(string taskType, string path, string provinceNo, string request, string requestData,
             string httpMethod = "Post", EPathType pathType = EPathType.Other, List<FileJson>? fileJson = null,
             DateTime? generationTime = null, DateTime? visitTime = null, string? subjectResultSatify = null, CancellationToken cancellationToken = default);

        /// <summary>
        /// 其他平台推送任务数据
        /// </summary>
        /// <param name="taskType">任务类型</param>
        /// <param name="path">请求地址</param>
        /// <param name="provinceNo">省编号</param>
        /// <param name="request">请求参数</param>
        /// <param name="requestData">请求参数</param>
        ///  <param name="platformSource">推送平台</param>
        /// <param name="httpMethod">请求方式</param>
        /// <param name="pathType">接口类型，汇聚、协同</param>
        /// <param name="fileJson">附件</param>
        /// <param name="generationTime">生成时间</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<string> InitDsSendTaskOtherPlatforms(string taskType, string path, string provinceNo, string request, string requestData,
          EPlatformSource platformSource, string httpMethod = "Post", EPathType pathType = EPathType.Other, List<FileJson>? fileJson = null,
          DateTime? generationTime = null, CancellationToken cancellationToken = default);

    }
}
