using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Input;
using NPP.SmartSchedue.Api.Contracts.Services.Integration.Output;
namespace NPP.SmartSchedue.Api.Contracts.Services.Integration
{
///
/// 整合记录服务接口
///
public interface IIntegrationRecordService
{
///
/// 生成整合记录
///
Task GenerateIntegrationRecordAsync(IntegrationRecordInput input);
///
/// 根据记录ID查询整合记录信息并附加任务集
///
/// 整合记录ID
/// 包含任务集的整合记录信息
Task GetIntegrationRecordWithTasksAsync(long recordId);
///
/// 查询所有整合记录列表
///
/// 查询条件
/// 整合记录列表
Task> GetIntegrationRecordsAsync(IntegrationRecordGetListInput input);
#region 发布管理接口
///
/// 发布整合记录
/// 将草稿状态的整合记录发布生效,更新任务分配状态
///
/// 发布输入参数
/// 发布结果
Task PublishIntegrationRecordAsync(PublishIntegrationRecordInput input);
///
/// 更新整合记录状态
/// 支持状态转换:草稿->已发布->已完成->已撤销
///
/// 整合记录ID
/// 新状态
/// 操作员用户ID
/// 操作员姓名
/// 状态更新说明
/// 更新结果
Task UpdateIntegrationRecordStatusAsync(long recordId, string newStatus, long operatorUserId, string operatorName, string remarks = "");
///
/// 发布修改后的任务
/// 将任务的修改内容发布到生产系统
///
/// 整合记录ID
/// 修改的任务ID列表
/// 操作员用户ID
/// 操作员姓名
/// 发布说明
/// 发布结果
Task PublishTaskModificationsAsync(long recordId, List modifiedTaskIds, long operatorUserId, string operatorName, string publishRemarks = "");
#endregion
#region 任务修改接口
///
/// 修改整合记录中的任务分配
/// 根据选中的人员修改任务的指定人员ID和姓名,并更新整合记录
///
/// 任务修改输入参数
/// 修改结果
Task ModifyIntegrationRecordTaskAsync(IntegrationRecordTaskModifyInput input);
#endregion
#region 通知管理接口(预留)
///
/// 发送发布通知(预留接口)
/// 向相关人员发送整合记录发布的通知信息
///
/// 整合记录ID
/// 通知类型
/// 目标人员ID列表
/// 自定义消息
/// 通知发送结果
Task SendPublishNotificationAsync(long recordId, string notificationType, List targetPersonnelIds, string customMessage = "");
///
/// 创建待办任务(预留接口)
/// 为相关人员创建与发布记录相关的待办任务
///
/// 整合记录ID
/// 待办类型
/// 负责人ID列表
/// 待办标题
/// 待办描述
/// 截止时间
/// 创建结果
Task CreatePublishRelatedTodoAsync(long recordId, string todoType, List assigneeIds, string title, string description, DateTime? dueDate = null);
#endregion
}
}