using System.Collections.Generic;
using System.Threading.Tasks;
using JiShe.CollectBus.EnergySystem.Dto;
using Volo.Abp.Application.Services;

namespace JiShe.CollectBus.EnergySystem;

public interface IEnergySystemAppService : IApplicationService
{
    /// <summary>
    ///     电表阀控、水表阀控
    /// </summary>
    /// <param name="input">The input.</param>
    /// <returns></returns>
    Task<BaseResultDto<ValveControlOutput>> ValveControl(ValveControlInput input);

    /// <summary>
    /// 批量抄读时段
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto<ReadTimeOutput>> ReadTime(ReadTimeInput input);

    /// <summary>
    /// 电表档案下发
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto<AmmeterArchivesDownOutput>> AmmeterArchivesDown(AmmeterArchivesDownInput input);

    /// <summary>
    /// 电表档案一键匹配
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> AmmeterArchivesMatch(AmmeterArchivesMatchInput input);

    /// <summary>
    /// 通讯参数设置
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> CommunicationParametersSet(CommunicationParametersSetInput  input);

    /// <summary>
    /// 召测时间
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> CallTimeTesting(CallTimeTestingInput input);

    /// <summary>
    /// 时间校准
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> TimeAdjust(TimeAdjustInput input);

    /// <summary>
    /// 重启终端
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> TerminalRestart(TerminalRestartInput input);

    /// <summary>
    /// 读取表号
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto<ReadMeterNumOutput>> ReadMeterNum(ReadMeterNumInput input);

    /// <summary>
    /// 抄读
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto<ReadingOutput>> Reading(ReadingInput input);

    /// <summary>
    /// 设置时间段
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> TimeSet(TimeSetInput input);

    /// <summary>
    /// 设置自动上报采集项
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> AutoReportCollectionItemsSet(AutoReportCollectionItemsSetInput input);

    /// <summary>
    /// 设置自动上报
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> AutoReportSet(AutoReportSetInput input);

    /// <summary>
    /// 查询自动上报开启状态
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> QueryAutoReportOpenStatus(QueryAutoReportOpenStatusInput input);

    /// <summary>
    /// 批量抄读版本
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto<BatchReadVersionOutput>> BatchReadVersion(BatchReadVersionInput input);

    /// <summary>
    /// 查询采集日志
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto<QueryRecordLogOutput>> QueryRecordLog(QueryRecordLogInput input);

    /// <summary>
    /// 校准电表时间
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> AdjustMeterTiming(AdjustMeterTimingInput input);

    /// <summary>
    /// 更新集中器在线记录
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> AddConrOnlineRecord(List<AddConrOnlineRecordInput> input);

    /// <summary>
    /// 记录信号强度
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> AddSignalStrength(List<AddSignalStrengthInput> input);

    /// <summary>
    /// 集中器上下线、心跳记录
    /// </summary>
    /// <param name="input"></param>
    /// <returns></returns>
    Task<BaseResultDto> AddFocusLog(List<AddFocusLogInput> input);
}