using DataSharing.Share.Dtos.Province.HuiJu;
using DataSharing.Share.Dtos.Province.XieTong.Send;
using Hotline.Share.Dtos.CallCenter;
using Hotline.Share.Dtos.Knowledge;
using Hotline.Share.Dtos.Order;
using Hotline.Share.Dtos.TrCallCenter;

namespace DataSharing.Province
{
    public interface IProvinceService
    {
        #region 协同-第一批次

        /// <summary>
        /// 退回申请
        /// </summary>
        /// <param name="dtos"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task GetCaseBackApplyAsync(PublishOrderSendBackDto dtos, CancellationToken cancellationToken);

        /// <summary>
        /// 服务工单督办过程
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SendSuperviseProcessInfoAsync(PublishSuperviseDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 服务工单督办结果
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SendSuperviseResultInfoAsync(PublishSuperviseDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 工单发起甄别
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task ScreenCaseInfoSendAsync(PublishScreenDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 服务工单申请延时
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task DelayCaseInfoSendAsync(PublishOrderDelayDto dto, CancellationToken cancellationToken);

        #endregion

        #region 汇聚-第二批次
        /// <summary>
        /// 热线工单流程开启
        /// </summary>
        /// <param name="pushdto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        Task OrderFlowStartedAsync(PublishCallRecrodDto pushdto, CancellationToken cancellationToken);

        /// <summary>
        /// 热线工单期满时间变更--推送服务工单受理
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task HotlineOrderFlowRecalledAsync(OrderDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 热线工单办理---服务工单处理/服务工单交办处理过程
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SubmitCaseProcessAsync(OrderFlowDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 补充流程节点附件
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SupplementFilesAsync(OrderFlowDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 热线工单归档---服务工单结果/服务工单交办处理结果
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task OrderFiledAsync(OrderFlowDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 服务工单回访评价/服务工单交办评价
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SubmitVisitInfoDataAsync(PublishVisitDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 挂电话推送----电话记录--丰窝最新
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        Task SubmitCaseRecordFwAsync(CallNativeDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 推送通话记录未关联工单数据
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        Task AssociateCallRecords(PublishCallRecrodDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 挂电话推送----电话记录
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SubmitCaseRecordAsync(PublishCallRecrodDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 关联工单了推送----电话记录
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SubmitCaseRecordOrderAsync(PublishCallRecrodDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 往省上派单
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SendCaseInfoDataAsync(OrderDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 统计数据
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task SubmitCaseTotalAsync(SubmitCaseTotalInfo dto, CancellationToken cancellationToken);

        #endregion

        #region 协同-第三批次

        /// <summary>
        /// 上报补充诉求
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SupplyCaseInfoSendAsync(SupplyCaseInfoSendInfo dto, CancellationToken cancellationToken);

        /// <summary>
        /// 撤单
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task RevokeOrderAsync(PublishSpecialDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 服务工单催单
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task SendRemindCaseInfoAsync(PublishUrgeDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 接收发布数据
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task PublishOrderAsync(PublishPublishOrderDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 政民互动公开
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        /// <exception cref="UserFriendlyException"></exception>
        Task PublicOrderProvinceZmhd(PublicOrderProvinceZmhdDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 接收发布的时候生成的待回访部门数据
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task PublishVisitAllAsync(PublishVisitAllDto dto, CancellationToken cancellationToken);

        #endregion

        #region 汇聚-第四批次

        #region 知识库--已对接附件
        /// <summary>
        /// 知识库上报
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task GetKnowledgeInfoSendAsync(KnowledgeSendDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 知识库变更
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task GetKnowledgeInfoUpdateAsync(KnowledgeSendDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 知识库下架
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task GetKnowledgeInfoAbandonAsync(KnowledgeSendDto dto, CancellationToken cancellationToken);
        #endregion

        /// <summary>
        /// 实时服务上报
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task SendRealTimeStatusAsync(SendRealTimeStatusInfo dto, CancellationToken cancellationToken);
        #endregion

        /// <summary>
        /// 服务工单拓展信息
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task SubmitCaseExtendsAsync(OrderDto dto, CancellationToken cancellationToken);
    }
}
