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

namespace Managing.Tools.ABI.OrderBookReader.ContractDefinition
{
    public class OrderBookReaderDeployment : OrderBookReaderDeploymentBase
    {
        public OrderBookReaderDeployment() : base(BYTECODE)
        {
        }

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

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

        public OrderBookReaderDeploymentBase() : base(BYTECODE)
        {
        }

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

    public class GetDecreaseOrdersFunction : GetDecreaseOrdersFunctionBase
    {
    }

    [Function("getDecreaseOrders", typeof(GetDecreaseOrdersOutputDTO))]
    public class GetDecreaseOrdersFunctionBase : FunctionMessage
    {
        [Parameter("address", "_orderBookAddress")]
        public virtual string OrderBookAddress { get; set; }

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

        [Parameter("uint256[]", "_indices", 3)]
        public virtual List<BigInteger> Indices { get; set; }
    }

    public class GetIncreaseOrdersFunction : GetIncreaseOrdersFunctionBase
    {
    }

    [Function("getIncreaseOrders", typeof(GetIncreaseOrdersOutputDTO))]
    public class GetIncreaseOrdersFunctionBase : FunctionMessage
    {
        [Parameter("address", "_orderBookAddress")]
        public virtual string OrderBookAddress { get; set; }

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

        [Parameter("uint256[]", "_indices", 3)]
        public virtual List<BigInteger> Indices { get; set; }
    }

    public class GetSwapOrdersFunction : GetSwapOrdersFunctionBase
    {
    }

    [Function("getSwapOrders", typeof(GetSwapOrdersOutputDTO))]
    public class GetSwapOrdersFunctionBase : FunctionMessage
    {
        [Parameter("address", "_orderBookAddress")]
        public virtual string OrderBookAddress { get; set; }

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

        [Parameter("uint256[]", "_indices", 3)]
        public virtual List<BigInteger> Indices { get; set; }
    }

    public class GetDecreaseOrdersOutputDTO : GetDecreaseOrdersOutputDTOBase
    {
    }

    [FunctionOutput]
    public class GetDecreaseOrdersOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("uint256[]", "")] public virtual List<BigInteger> ReturnValue1 { get; set; }
        [Parameter("address[]", "", 2)] public virtual List<string> ReturnValue2 { get; set; }
    }

    public class GetIncreaseOrdersOutputDTO : GetIncreaseOrdersOutputDTOBase
    {
    }

    [FunctionOutput]
    public class GetIncreaseOrdersOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("uint256[]", "")] public virtual List<BigInteger> ReturnValue1 { get; set; }
        [Parameter("address[]", "", 2)] public virtual List<string> ReturnValue2 { get; set; }
    }

    public class GetSwapOrdersOutputDTO : GetSwapOrdersOutputDTOBase
    {
    }

    [FunctionOutput]
    public class GetSwapOrdersOutputDTOBase : IFunctionOutputDTO
    {
        [Parameter("uint256[]", "")] public virtual List<BigInteger> ReturnValue1 { get; set; }
        [Parameter("address[]", "", 2)] public virtual List<string> ReturnValue2 { get; set; }
    }
}