using EgwCoreLib.Utils;
using MP.Core.DTO;
using MP.Data.DbModels.Utils;
using MP.Data.DTO;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace MP.Data.Services.Utils
{
public interface IStatsDetailService
{
#region Public Methods
///
/// Recupera le statistiche di dettaglio per un periodo specificato, con filtri opzionali su ambiente e tipo.
/// Utilizza la cache automaticamente.
///
/// Data inizio periodo
/// Data fine periodo
/// Filtro opzionale per destinazione (default: vuoto = tutti)
/// Filtro opzionale per tipo (default: vuoto = tutti)
Task> GetFiltAsync(DateTime dtStart, DateTime dtEnd, string sDest = "", string sType = "");
///
/// Restituisce un Pareto degli eventi (in forma originale) più frequenti dato periodo ed eventuale filtro Destinazione/Tipo
///
/// Data inizio periodo
/// Data fine periodo
///
/// Filtro opzionale per destinazione (default: vuoto = tutti)
/// Filtro opzionale per tipo (default: vuoto = tutti)
///
Task> GetParetoAsync(DateTime dtStart, DateTime dtEnd, int maxRec, string sDest = "", string sType = "");
///
/// Restituisce un dizionario di elaborazioni di tipo Pareto
/// Ogni elaborazione contiene Dictionary in forma pareto per una data statistica
///
///
//Task>> GetParetoStatsDayAsync();
Task> GetParetoStatsDayAsync();
///
/// Recupera il range di periodi valido per le chiamate di dettaglio.
/// Utilizza la cache automaticamente.
///
/// Ambiente filtrato
/// Tipo filtrato
Task GetRangeAsync(string sEnvir, string sType);
///
/// Helper conversione dati dettaglio in statistiche da inviare a ChartJS
///
///
/// metrica conteggio/avgDuration
///
List GetTimeSeriesData(List rawData, bool showCount);
///
/// Forza il reset della cache REDIS x i dati
///
///
Task ResetCache();
///
/// Inserisce o aggiorna in batch le statistiche di dettaglio nel database.
/// Opzionalmente elimina i record precedenti nel periodo specificato.
///
/// Elenco dei record da inserire/aggiornare
/// Se true elimina preventivamente i record nel periodo richiesto
Task UpsertManyAsync(List listRecords, bool removeOld);
#endregion Public Methods
}
}