using Managing.Domain.Statistics;

namespace Managing.Application.Abstractions.Repositories;

public interface IStatisticRepository
{
    Task InsertTopVolumeTicker(TopVolumeTicker topVolumeTicker);
    IList<TopVolumeTicker> GetTopVolumeTickers(DateTime date);
    Task<IList<TopVolumeTicker>> GetTopVolumeTickersAsync(DateTime date);

    Task SaveSpotligthtOverview(SpotlightOverview overview);
    IList<SpotlightOverview> GetSpotlightOverviews(DateTime date);
    Task<IList<SpotlightOverview>> GetSpotlightOverviewsAsync(DateTime date);
    void UpdateSpotlightOverview(SpotlightOverview overview);
    Task UpdateSpotlightOverviewAsync(SpotlightOverview overview);

    Task<List<Trader>> GetBestTradersAsync();
    Task UpdateBestTraderAsync(Trader trader);
    Task InsertBestTrader(Trader trader);
    Task RemoveBestTrader(Trader trader);

    Task<List<Trader>> GetBadTradersAsync();
    Task UpdateBadTraderAsync(Trader trader);
    Task InsertBadTrader(Trader trader);
    Task RemoveBadTrader(Trader trader);

    Task<List<FundingRate>> GetFundingRatesAsync();
    Task RemoveFundingRate(FundingRate oldRate);
    Task InsertFundingRate(FundingRate newRate);
    Task UpdateFundingRateAsync(FundingRate oldRate, FundingRate newRate);
}