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

namespace Managing.ABI.GmxV2.Reader.ContractDefinition
{
    public partial class PositionFees : PositionFeesBase
    {
    }

    public class PositionFeesBase
    {
        [Parameter("tuple", "referral", 1)] public virtual PositionReferralFees Referral { get; set; }
        [Parameter("tuple", "funding", 2)] public virtual PositionFundingFees Funding { get; set; }
        [Parameter("tuple", "borrowing", 3)] public virtual PositionBorrowingFees Borrowing { get; set; }
        [Parameter("tuple", "ui", 4)] public virtual PositionUiFees Ui { get; set; }

        [Parameter("tuple", "collateralTokenPrice", 5)]
        public virtual Props CollateralTokenPrice { get; set; }

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

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

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

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

        [Parameter("uint256", "feeAmountForPool", 10)]
        public virtual BigInteger FeeAmountForPool { get; set; }

        [Parameter("uint256", "positionFeeAmountForPool", 11)]
        public virtual BigInteger PositionFeeAmountForPool { get; set; }

        [Parameter("uint256", "positionFeeAmount", 12)]
        public virtual BigInteger PositionFeeAmount { get; set; }

        [Parameter("uint256", "totalCostAmountExcludingFunding", 13)]
        public virtual BigInteger TotalCostAmountExcludingFunding { get; set; }

        [Parameter("uint256", "totalCostAmount", 14)]
        public virtual BigInteger TotalCostAmount { get; set; }
    }
}