using Hotline.Share.Dtos.Planlibrary;

namespace Hotline.Application.Planlibrary
{
    public interface IPlanApplication
    {

        #region 预案库类型管理

        /// <summary>
        ///预案库类型 - 新增
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task<string> AddTypeAsync(AddPlanTypeDto dto, CancellationToken cancellationToken);

        /// <summary>
        ///预案库类型 - 编辑
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task UpdateTypeAsync(UpdatePlanTypeDto dto, CancellationToken cancellationToken);

        /// <summary>
        /// 预案库类型 - 删除
        /// </summary>
        /// <param name="Id"></param>
        /// <returns></returns>
        Task RemoveTypeAsync(string Id, CancellationToken cancellationToken);

        #endregion

        #region 预案库管理

        /// <summary>
        /// 预案库 - 列表
        /// </summary>
        /// <param name="pagedDto"></param>
        /// <returns></returns>
        Task<(int, IList<PlanDataDto>)> QueryAllPlanListAsync(PlanListDto pagedDto, CancellationToken cancellationToken);

        /// <summary>
        /// 预案库 - 新增
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<string> AddPlanAsync(AddPlanListDto dto, CancellationToken cancellationToken);

        /// <summary>
        ///预案库类型 - 编辑
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task UpdatePlanAsync(UpdatePlanListDto dto, CancellationToken cancellationToken);

        /// <summary>
        ///预案库类型 - 删除
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task RemovePlanAsync(UpdatePlanListDto dto, CancellationToken cancellationToken);

        /// <summary>
        ///预案库类型 - 下架审核
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        Task AuditPlanAsync(UpdatePlanListDto dto, CancellationToken cancellationToken);

        /// <summary>
        ///预案库类型 - 详情
        /// </summary>
        /// <param name="Id"></param>
        /// <param name="IsAddPv">默认不增加，false不增加，true增加浏览量</param>
        /// <returns></returns>
        Task<PlanInfoDto> GetPlanAsync(string Id, bool? IsAddPv, CancellationToken cancellationToken);

        /// <summary>
        /// 预案库类型 - 批量导出
        /// </summary>
        /// <param name="dto"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        Task<Dictionary<string, Stream>> PlanInfoListExportAsync(PlanInfoExportDto dto, CancellationToken cancellationToken);

        #endregion

    }
}
