using Managing.Domain.Accounts;
using static Managing.Common.Enums;

namespace Managing.Application.Abstractions.Services
{
    public interface IWeb3ProxyService
    {
        Task<T> CallPrivyServiceAsync<T>(string endpoint, object payload);
        Task<T> GetPrivyServiceAsync<T>(string endpoint, object payload = null);
        Task<T> CallGmxServiceAsync<T>(string endpoint, object payload);
        Task<T> GetGmxServiceAsync<T>(string endpoint, object payload = null);
        Task<GmxClaimableSummary> GetGmxClaimableSummaryAsync(string account);

        Task<SwapInfos> SwapGmxTokensAsync(string account, Ticker fromTicker, Ticker toTicker, double amount,
            string orderType = "market", double? triggerRatio = null, double allowedSlippage = 0.5);

        Task<SwapInfos> SendTokenAsync(string senderAddress, string recipientAddress, Ticker ticker, decimal amount, int? chainId = null);
        
        Task<List<Balance>> GetWalletBalanceAsync(string address, Ticker[] assets, string[] chains);
    }
}