using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Txgy.EWS.Client.Models;
using Txgy.Microseismic.BaseLib.Common;
using Txgy.Microseismic.BaseLib.Entitys;

namespace Txgy.EWS.Client.IBLL
{
    public interface ISearchMsEventBLL
    {
        int PreSelectCount { get; set; }
        List<postproeventresult> GetEvents(DateTime startTime,DateTime endTime,int pageIndex, int perPageCount, float minML, float maxML);
        MmEventEntity GetEvent(string eventTime);
        MmEventEntity GetEvent(int eventID);
        MmEventEntity GetLastEvent();
        MmEventEntity GetLastEvent(DateTime deadline);
        List<MmEventEntity> GetTopEvents(int MaxCnt, int PreCnt);
        List<MmEventEntity> GetLastNewEvents(int resultCount);
        List<MmEventEntity> GetEvents(DateTime startTime, DateTime endTime);
        List<MmEventEntity> GetEvents(DateTime startTime, DateTime endTime, double minML, double maxML);
        List<MmEventEntity> GetEvents(string QueryStr, SortTarget ssm, int sm, Models.FilterCondition<double> energyFC);
        bool DownLoadWavedata(string eventTime, string savePath, string saveName, string tableName);
        void SaveBinaryFile(string fn, byte[] datas);

        Task QueryAndDownloadDataAsync(int eventID, string savePath, Action<GridItemEventResult> callback);
        Task QueryAndDownloadDataAsync(int eventID, DateTime endTime, string savePath, Action<GridItemEventResult> callback);
        Task<int> StatEventCountAsync(DateTime startTime, DateTime endTime);
        Task QueryEventByIDAsync(int eventID, string savePath, Action<GridItemEventResult> callback);
        List<GridItemEventResult> GetLastEvents(int lastEventID);
        List<GridItemEventResult> GetLastTopEvents(int QueryCount);
        ValueTask DownloadWaveDataAsync(GridItemEventResult gier, string savePath, Action<GridItemEventResult> callback);
        ValueTask DownloadJsonDataAsync(GridItemEventResult gier, string savePath, Action<GridItemEventResult> callback);

        List<GridItemEventResult> GetGridEvents(DateTime startTime, DateTime endTime, double minML, double maxML);
    }
}
