using System.Numerics;
using Managing.ABI.GmxV2.Reader.ContractDefinition;
using Nethereum.ABI.FunctionEncoding.Attributes;

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

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

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

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

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

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

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

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

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

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

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

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

        [Parameter("uint256", "totalDiscountAmount", 17)]
        public virtual BigInteger TotalDiscountAmount { get; set; }
    }
}