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

namespace Managing.ABI.GmxV2.ExchangeRouter.ContractDefinition
{
    public partial class CreateDepositParams : CreateDepositParamsBase
    {
    }

    public class CreateDepositParamsBase
    {
        [Parameter("address", "receiver", 1)] public virtual string Receiver { get; set; }

        [Parameter("address", "callbackContract", 2)]
        public virtual string CallbackContract { get; set; }

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

        [Parameter("address", "market", 4)] public virtual string Market { get; set; }

        [Parameter("address", "initialLongToken", 5)]
        public virtual string InitialLongToken { get; set; }

        [Parameter("address", "initialShortToken", 6)]
        public virtual string InitialShortToken { get; set; }

        [Parameter("address[]", "longTokenSwapPath", 7)]
        public virtual List<string> LongTokenSwapPath { get; set; }

        [Parameter("address[]", "shortTokenSwapPath", 8)]
        public virtual List<string> ShortTokenSwapPath { get; set; }

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

        [Parameter("bool", "shouldUnwrapNativeToken", 10)]
        public virtual bool ShouldUnwrapNativeToken { get; set; }

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

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