using System.Numerics;

namespace Managing.Infrastructure.Evm.Models.Gmx.v2;

public class GmxMarketInfos
{
    public bool IsDisabled { get; set; }

    public GmxTokenData LongToken { get; set; }
    public GmxTokenData ShortToken { get; set; }
    public GmxTokenData IndexToken { get; set; }

    public BigInteger LongPoolAmount { get; set; }
    public BigInteger ShortPoolAmount { get; set; }

    public BigInteger MaxLongPoolAmount { get; set; }
    public BigInteger MaxShortPoolAmount { get; set; }
    public BigInteger MaxLongPoolUsdForDeposit { get; set; }
    public BigInteger MaxShortPoolUsdForDeposit { get; set; }

    public BigInteger LongPoolAmountAdjustment { get; set; }
    public BigInteger ShortPoolAmountAdjustment { get; set; }

    public BigInteger PoolValueMax { get; set; }
    public BigInteger PoolValueMin { get; set; }

    public BigInteger ReserveFactorLong { get; set; }
    public BigInteger ReserveFactorShort { get; set; }

    public BigInteger OpenInterestReserveFactorLong { get; set; }
    public BigInteger OpenInterestReserveFactorShort { get; set; }

    public BigInteger MaxOpenInterestLong { get; set; }
    public BigInteger MaxOpenInterestShort { get; set; }

    public BigInteger BorrowingFactorLong { get; set; }
    public BigInteger BorrowingFactorShort { get; set; }
    public BigInteger BorrowingExponentFactorLong { get; set; }
    public BigInteger BorrowingExponentFactorShort { get; set; }

    public BigInteger FundingFactor { get; set; }
    public BigInteger FundingExponentFactor { get; set; }
    public BigInteger FundingIncreaseFactorPerSecond { get; set; }
    public BigInteger FundingDecreaseFactorPerSecond { get; set; }
    public BigInteger ThresholdForStableFunding { get; set; }
    public BigInteger ThresholdForDecreaseFunding { get; set; }
    public BigInteger MinFundingFactorPerSecond { get; set; }
    public BigInteger MaxFundingFactorPerSecond { get; set; }

    public BigInteger TotalBorrowingFees { get; set; }

    public BigInteger PositionImpactPoolAmount { get; set; }
    public BigInteger MinPositionImpactPoolAmount { get; set; }
    public BigInteger PositionImpactPoolDistributionRate { get; set; }

    public BigInteger MinCollateralFactor { get; set; }
    public BigInteger MinCollateralFactorForOpenInterestLong { get; set; }
    public BigInteger MinCollateralFactorForOpenInterestShort { get; set; }

    public BigInteger SwapImpactPoolAmountLong { get; set; }
    public BigInteger SwapImpactPoolAmountShort { get; set; }

    public BigInteger MaxPnlFactorForTradersLong { get; set; }
    public BigInteger MaxPnlFactorForTradersShort { get; set; }

    public BigInteger PnlLongMin { get; set; }
    public BigInteger PnlLongMax { get; set; }
    public BigInteger PnlShortMin { get; set; }
    public BigInteger PnlShortMax { get; set; }

    public BigInteger NetPnlMin { get; set; }
    public BigInteger NetPnlMax { get; set; }

    public BigInteger? ClaimableFundingAmountLong { get; set; }
    public BigInteger? ClaimableFundingAmountShort { get; set; }

    public BigInteger LongInterestUsd { get; set; }
    public BigInteger ShortInterestUsd { get; set; }
    public BigInteger LongInterestInTokens { get; set; }
    public BigInteger ShortInterestInTokens { get; set; }

    public BigInteger PositionFeeFactorForPositiveImpact { get; set; }
    public BigInteger PositionFeeFactorForNegativeImpact { get; set; }
    public BigInteger PositionImpactFactorPositive { get; set; }
    public BigInteger PositionImpactFactorNegative { get; set; }
    public BigInteger MaxPositionImpactFactorPositive { get; set; }
    public BigInteger MaxPositionImpactFactorNegative { get; set; }
    public BigInteger MaxPositionImpactFactorForLiquidations { get; set; }
    public BigInteger PositionImpactExponentFactor { get; set; }

    public BigInteger SwapFeeFactorForPositiveImpact { get; set; }
    public BigInteger SwapFeeFactorForNegativeImpact { get; set; }
    public BigInteger SwapImpactFactorPositive { get; set; }
    public BigInteger SwapImpactFactorNegative { get; set; }
    public BigInteger SwapImpactExponentFactor { get; set; }

    public BigInteger BorrowingFactorPerSecondForLongs { get; set; }
    public BigInteger BorrowingFactorPerSecondForShorts { get; set; }

    public BigInteger FundingFactorPerSecond { get; set; }
    public bool LongsPayShorts { get; set; }

    public BigInteger VirtualPoolAmountForLongToken { get; set; }
    public BigInteger VirtualPoolAmountForShortToken { get; set; }
    public BigInteger VirtualInventoryForPositions { get; set; }

    public string VirtualMarketId { get; set; }
    public string VirtualLongTokenId { get; set; }
    public string VirtualShortTokenId { get; set; }
}