using System.Numerics;
using Nethereum.ABI.FunctionEncoding.Attributes;

namespace Managing.ABI.GmxV2.SyntheticsReader.ContractDefinition
{
    public partial class PositionProps : PositionPropsBase
    {
    }

    public class PositionPropsBase
    {
        [Parameter("tuple", "addresses", 1)] public virtual PositionAddresses Addresses { get; set; }

        [Parameter("tuple", "numbers", 2)] public virtual PositionNumbers Numbers { get; set; }
        [Parameter("tuple", "flags", 3)] public virtual PositionFlags Flags { get; set; }
    }

    public class PositionFlags
    {
        [Parameter("bool", "isLong", 1)] public virtual bool IsLong { get; set; }
    }

    public class PositionAddresses
    {
        [Parameter("address", "account", 1)] public virtual string Account { get; set; }
        [Parameter("address", "market", 2)] public virtual string Market { get; set; }

        [Parameter("address", "collateralToken", 3)]
        public virtual string CollateralToken { get; set; }
    }

    public class PositionNumbers
    {
        [Parameter("uint256", "sizeInUsd", 1)] public virtual BigInteger SizeInUsd { get; set; }

        [Parameter("uint256", "sizeInTokens", 2)]
        public virtual BigInteger SizeInTokens { get; set; }

        [Parameter("uint256", "collateralAmount", 3)]
        public virtual BigInteger CollateralAmount { get; set; }

        [Parameter("uint256", "borrowingFactor", 4)]
        public virtual BigInteger BorrowingFactor { get; set; }

        [Parameter("uint256", "fundingFeeAmountPerSize", 5)]
        public virtual BigInteger FundingFeeAmountPerSize { get; set; }

        [Parameter("uint256", "longTokenClaimableFundingAmountPerSize", 6)]
        public virtual BigInteger LongTokenClaimableFundingAmountPerSize { get; set; }

        [Parameter("uint256", "shortTokenClaimableFundingAmountPerSize", 7)]
        public virtual BigInteger ShortTokenClaimableFundingAmountPerSize { get; set; }

        [Parameter("uint256", "increasedAtTime", 8)]
        public virtual BigInteger IncreasedAtTime { get; set; }

        [Parameter("uint256", "decreasedAtTime", 9)]
        public virtual BigInteger DecreasedAtTime { get; set; }
    }
}