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

namespace Managing.Tools.ABI.Router.ContractDefinition
{
    public class RouterDeployment : RouterDeploymentBase
    {
        public RouterDeployment() : base(BYTECODE)
        {
        }

        public RouterDeployment(string byteCode) : base(byteCode)
        {
        }
    }

    public class RouterDeploymentBase : ContractDeploymentMessage
    {
        public static string BYTECODE =
            "[encoded data, 18862 characters]";

        public RouterDeploymentBase() : base(BYTECODE)
        {
        }

        public RouterDeploymentBase(string byteCode) : base(byteCode)
        {
        }

        [Parameter("address", "_vault")] public virtual string Vault { get; set; }
        [Parameter("address", "_usdg", 2)] public virtual string Usdg { get; set; }
        [Parameter("address", "_weth", 3)] public virtual string Weth { get; set; }
    }

    public class AddPluginFunction : AddPluginFunctionBase
    {
    }

    [Function("addPlugin")]
    public class AddPluginFunctionBase : FunctionMessage
    {
        [Parameter("address", "_plugin")] public virtual string Plugin { get; set; }
    }

    public class ApprovePluginFunction : ApprovePluginFunctionBase
    {
    }

    [Function("approvePlugin")]
    public class ApprovePluginFunctionBase : FunctionMessage
    {
        [Parameter("address", "_plugin")] public virtual string Plugin { get; set; }
    }

    public class ApprovedPluginsFunction : ApprovedPluginsFunctionBase
    {
    }

    [Function("approvedPlugins", "bool")]
    public class ApprovedPluginsFunctionBase : FunctionMessage
    {
        [Parameter("address", "")] public virtual string ReturnValue1 { get; set; }
        [Parameter("address", "", 2)] public virtual string ReturnValue2 { get; set; }
    }

    public class DecreasePositionFunction : DecreasePositionFunctionBase
    {
    }

    [Function("decreasePosition")]
    public class DecreasePositionFunctionBase : FunctionMessage
    {
        [Parameter("address", "_collateralToken")]
        public virtual string CollateralToken { get; set; }

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

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

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

        [Parameter("bool", "_isLong", 5)] public virtual bool IsLong { get; set; }
        [Parameter("address", "_receiver", 6)] public virtual string Receiver { get; set; }
        [Parameter("uint256", "_price", 7)] public virtual BigInteger Price { get; set; }
    }

    public class DecreasePositionAndSwapFunction : DecreasePositionAndSwapFunctionBase
    {
    }

    [Function("decreasePositionAndSwap")]
    public class DecreasePositionAndSwapFunctionBase : FunctionMessage
    {
        [Parameter("address[]", "_path")] public virtual List<string> Path { get; set; }

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

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

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

        [Parameter("bool", "_isLong", 5)] public virtual bool IsLong { get; set; }
        [Parameter("address", "_receiver", 6)] public virtual string Receiver { get; set; }
        [Parameter("uint256", "_price", 7)] public virtual BigInteger Price { get; set; }
        [Parameter("uint256", "_minOut", 8)] public virtual BigInteger MinOut { get; set; }
    }

    public class DecreasePositionAndSwapETHFunction : DecreasePositionAndSwapETHFunctionBase
    {
    }

    [Function("decreasePositionAndSwapETH")]
    public class DecreasePositionAndSwapETHFunctionBase : FunctionMessage
    {
        [Parameter("address[]", "_path")] public virtual List<string> Path { get; set; }

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

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

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

        [Parameter("bool", "_isLong", 5)] public virtual bool IsLong { get; set; }
        [Parameter("address", "_receiver", 6)] public virtual string Receiver { get; set; }
        [Parameter("uint256", "_price", 7)] public virtual BigInteger Price { get; set; }
        [Parameter("uint256", "_minOut", 8)] public virtual BigInteger MinOut { get; set; }
    }

    public class DecreasePositionETHFunction : DecreasePositionETHFunctionBase
    {
    }

    [Function("decreasePositionETH")]
    public class DecreasePositionETHFunctionBase : FunctionMessage
    {
        [Parameter("address", "_collateralToken")]
        public virtual string CollateralToken { get; set; }

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

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

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

        [Parameter("bool", "_isLong", 5)] public virtual bool IsLong { get; set; }
        [Parameter("address", "_receiver", 6)] public virtual string Receiver { get; set; }
        [Parameter("uint256", "_price", 7)] public virtual BigInteger Price { get; set; }
    }

    public class DenyPluginFunction : DenyPluginFunctionBase
    {
    }

    [Function("denyPlugin")]
    public class DenyPluginFunctionBase : FunctionMessage
    {
        [Parameter("address", "_plugin")] public virtual string Plugin { get; set; }
    }

    public class DirectPoolDepositFunction : DirectPoolDepositFunctionBase
    {
    }

    [Function("directPoolDeposit")]
    public class DirectPoolDepositFunctionBase : FunctionMessage
    {
        [Parameter("address", "_token")] public virtual string Token { get; set; }
        [Parameter("uint256", "_amount", 2)] public virtual BigInteger Amount { get; set; }
    }

    public class GovFunction : GovFunctionBase
    {
    }

    [Function("gov", "address")]
    public class GovFunctionBase : FunctionMessage
    {
    }

    public class IncreasePositionFunction : IncreasePositionFunctionBase
    {
    }

    [Function("increasePosition")]
    public class IncreasePositionFunctionBase : FunctionMessage
    {
        [Parameter("address[]", "_path")] public virtual List<string> Path { get; set; }

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

        [Parameter("uint256", "_amountIn", 3)] public virtual BigInteger AmountIn { get; set; }
        [Parameter("uint256", "_minOut", 4)] public virtual BigInteger MinOut { get; set; }

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

        [Parameter("bool", "_isLong", 6)] public virtual bool IsLong { get; set; }
        [Parameter("uint256", "_price", 7)] public virtual BigInteger Price { get; set; }
    }

    public class IncreasePositionETHFunction : IncreasePositionETHFunctionBase
    {
    }

    [Function("increasePositionETH")]
    public class IncreasePositionETHFunctionBase : FunctionMessage
    {
        [Parameter("address[]", "_path")] public virtual List<string> Path { get; set; }

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

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

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

        [Parameter("bool", "_isLong", 5)] public virtual bool IsLong { get; set; }
        [Parameter("uint256", "_price", 6)] public virtual BigInteger Price { get; set; }
    }

    public class PluginDecreasePositionFunction : PluginDecreasePositionFunctionBase
    {
    }

    [Function("pluginDecreasePosition", "uint256")]
    public class PluginDecreasePositionFunctionBase : FunctionMessage
    {
        [Parameter("address", "_account")] public virtual string Account { get; set; }

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

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

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

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

        [Parameter("bool", "_isLong", 6)] public virtual bool IsLong { get; set; }
        [Parameter("address", "_receiver", 7)] public virtual string Receiver { get; set; }
    }

    public class PluginIncreasePositionFunction : PluginIncreasePositionFunctionBase
    {
    }

    [Function("pluginIncreasePosition")]
    public class PluginIncreasePositionFunctionBase : FunctionMessage
    {
        [Parameter("address", "_account")] public virtual string Account { get; set; }

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

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

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

        [Parameter("bool", "_isLong", 5)] public virtual bool IsLong { get; set; }
    }

    public class PluginTransferFunction : PluginTransferFunctionBase
    {
    }

    [Function("pluginTransfer")]
    public class PluginTransferFunctionBase : FunctionMessage
    {
        [Parameter("address", "_token")] public virtual string Token { get; set; }
        [Parameter("address", "_account", 2)] public virtual string Account { get; set; }
        [Parameter("address", "_receiver", 3)] public virtual string Receiver { get; set; }
        [Parameter("uint256", "_amount", 4)] public virtual BigInteger Amount { get; set; }
    }

    public class PluginsFunction : PluginsFunctionBase
    {
    }

    [Function("plugins", "bool")]
    public class PluginsFunctionBase : FunctionMessage
    {
        [Parameter("address", "")] public virtual string ReturnValue1 { get; set; }
    }

    public class RemovePluginFunction : RemovePluginFunctionBase
    {
    }

    [Function("removePlugin")]
    public class RemovePluginFunctionBase : FunctionMessage
    {
        [Parameter("address", "_plugin")] public virtual string Plugin { get; set; }
    }

    public class SetGovFunction : SetGovFunctionBase
    {
    }

    [Function("setGov")]
    public class SetGovFunctionBase : FunctionMessage
    {
        [Parameter("address", "_gov")] public virtual string Gov { get; set; }
    }

    public class SwapFunction : SwapFunctionBase
    {
    }

    [Function("swap")]
    public class SwapFunctionBase : FunctionMessage
    {
        [Parameter("address[]", "_path")] public virtual List<string> Path { get; set; }
        [Parameter("uint256", "_amountIn", 2)] public virtual BigInteger AmountIn { get; set; }
        [Parameter("uint256", "_minOut", 3)] public virtual BigInteger MinOut { get; set; }
        [Parameter("address", "_receiver", 4)] public virtual string Receiver { get; set; }
    }

    public class SwapETHToTokensFunction : SwapETHToTokensFunctionBase
    {
    }

    [Function("swapETHToTokens")]
    public class SwapETHToTokensFunctionBase : FunctionMessage
    {
        [Parameter("address[]", "_path")] public virtual List<string> Path { get; set; }
        [Parameter("uint256", "_minOut", 2)] public virtual BigInteger MinOut { get; set; }
        [Parameter("address", "_receiver", 3)] public virtual string Receiver { get; set; }
    }

    public class SwapTokensToETHFunction : SwapTokensToETHFunctionBase
    {
    }

    [Function("swapTokensToETH")]
    public class SwapTokensToETHFunctionBase : FunctionMessage
    {
        [Parameter("address[]", "_path")] public virtual List<string> Path { get; set; }
        [Parameter("uint256", "_amountIn", 2)] public virtual BigInteger AmountIn { get; set; }
        [Parameter("uint256", "_minOut", 3)] public virtual BigInteger MinOut { get; set; }
        [Parameter("address", "_receiver", 4)] public virtual string Receiver { get; set; }
    }

    public class UsdgFunction : UsdgFunctionBase
    {
    }

    [Function("usdg", "address")]
    public class UsdgFunctionBase : FunctionMessage
    {
    }

    public class VaultFunction : VaultFunctionBase
    {
    }

    [Function("vault", "address")]
    public class VaultFunctionBase : FunctionMessage
    {
    }

    public class WethFunction : WethFunctionBase
    {
    }

    [Function("weth", "address")]
    public class WethFunctionBase : FunctionMessage
    {
    }

    public class SwapEventDTO : SwapEventDTOBase
    {
    }

    [Event("Swap")]
    public class SwapEventDTOBase : IEventDTO
    {
        [Parameter("address", "account", 1, false)]
        public virtual string Account { get; set; }

        [Parameter("address", "tokenIn", 2, false)]
        public virtual string TokenIn { get; set; }

        [Parameter("address", "tokenOut", 3, false)]
        public virtual string TokenOut { get; set; }

        [Parameter("uint256", "amountIn", 4, false)]
        public virtual BigInteger AmountIn { get; set; }

        [Parameter("uint256", "amountOut", 5, false)]
        public virtual BigInteger AmountOut { get; set; }
    }


    public class ApprovedPluginsOutputDTO : ApprovedPluginsOutputDTOBase
    {
    }

    [FunctionOutput]
    public class ApprovedPluginsOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("bool", "")] public virtual bool ReturnValue1 { get; set; }
    }


    public class GovOutputDTO : GovOutputDTOBase
    {
    }

    [FunctionOutput]
    public class GovOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "")] public virtual string ReturnValue1 { get; set; }
    }


    public class PluginsOutputDTO : PluginsOutputDTOBase
    {
    }

    [FunctionOutput]
    public class PluginsOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("bool", "")] public virtual bool ReturnValue1 { get; set; }
    }


    public class UsdgOutputDTO : UsdgOutputDTOBase
    {
    }

    [FunctionOutput]
    public class UsdgOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "")] public virtual string ReturnValue1 { get; set; }
    }

    public class VaultOutputDTO : VaultOutputDTOBase
    {
    }

    [FunctionOutput]
    public class VaultOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "")] public virtual string ReturnValue1 { get; set; }
    }

    public class WethOutputDTO : WethOutputDTOBase
    {
    }

    [FunctionOutput]
    public class WethOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("address", "")] public virtual string ReturnValue1 { get; set; }
    }
}