﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DaoUtils.Standard
{
    public interface IDaoParametersBuilderInput
    {
        IDaoInputParameter<byte> AsByteParameter();
        IDaoInputParameter<byte[]> AsBinaryParameter();
        IDaoInputParameter<byte?> AsByteNullableParameter();
        IDaoInputParameter<DateTime> AsDateTimeParameter();
        IDaoInputParameter<DateTime> AsDateReaderParameter();
        IDaoInputParameter<DateTime> AsTimeReaderParameter();
        IDaoInputParameter<DateTime?> AsDateTimeNullableParameter();
        IDaoInputParameter<DateTime?> AsDateNullableParameter();
        IDaoInputParameter<DateTime?> AsTimeNullableParameter();
        IDaoInputParameter<decimal> AsDecimalParameter();
        IDaoInputParameter<decimal?> AsDecimalNullableParameter();
        IDaoInputParameter<double> AsDoubleParameter();
        IDaoInputParameter<double?> AsDoubleNullableParameter();
        IDaoInputParameter<short> AsInt16Parameter();
        IDaoInputParameter<short?> AsInt16NullableParameter();
        IDaoInputParameter<short> AsShortParameter();
        IDaoInputParameter<short?> AsShortNullableParameter();
        IDaoInputParameter<int> AsInt32Parameter();
        IDaoInputParameter<int?> AsInt32NullableParameter();
        IDaoInputParameter<int> AsIntParameter();
        IDaoInputParameter<int?> AsIntNullableParameter();
        IDaoInputParameter<long> AsInt64Parameter();
        IDaoInputParameter<long?> AsInt64NullableParameter();
        IDaoInputParameter<long> AsLongParameter();
        IDaoInputParameter<long?> AsLongNullableParameter();
        IDaoInputParameter<sbyte> AsSByteParameter();
        IDaoInputParameter<sbyte?> AsSByteNullableParameter();
        IDaoInputParameter<float> AsSingleParameter();
        IDaoInputParameter<float?> AsSingleNullableParameter();
        IDaoInputParameter<string> AsStringParameter();
        IDaoInputParameter<string> AsAnsiStringParameter();
        IDaoInputParameter<ushort> AsUInt16Parameter();
        IDaoInputParameter<ushort?> AsUInt16NullableParameter();
        IDaoInputParameter<ushort> AsUshortParameter();
        IDaoInputParameter<ushort?> AsUshortNullableParameter();
        IDaoInputParameter<uint> AsUInt32Parameter();
        IDaoInputParameter<uint?> AsUInt32NullableParameter();
        IDaoInputParameter<uint> AsUintParameter();
        IDaoInputParameter<uint?> AsUintNullableParameter();
        IDaoInputParameter<ulong> AsUInt64Parameter();
        IDaoInputParameter<ulong?> AsUInt64NullableParameter();
        IDaoInputParameter<ulong> AsUlongParameter();
        IDaoInputParameter<ulong?> AsUlongNullableParameter();

        IDaoInputParameter<byte> Value(byte value);
        IDaoInputParameter<byte[]> Value(byte[] value);
        IDaoInputParameter<byte?> Value(byte? value);
        IDaoInputParameter<DateTime> Value(DateTime value);
        IDaoInputParameter<DateTime?> Value(DateTime? value);
        IDaoInputParameter<decimal> Value(decimal value);
        IDaoInputParameter<decimal?> Value(decimal? value);
        IDaoInputParameter<double> Value(double value);
        IDaoInputParameter<double?> Value(double? value);
        IDaoInputParameter<short> Value(short value);
        IDaoInputParameter<short?> Value(short? value);
        IDaoInputParameter<int> Value(int value);
        IDaoInputParameter<int?> Value(int? value);
        IDaoInputParameter<long> Value(long value);
        IDaoInputParameter<long?> Value(long? value);
        IDaoInputParameter<sbyte> Value(sbyte value);
        IDaoInputParameter<sbyte?> Value(sbyte? value);
        IDaoInputParameter<float> Value(float value);
        IDaoInputParameter<float?> Value(float? value);
        IDaoInputParameter<string> Value(string value);
        IDaoInputParameter<ushort> Value(ushort value);
        IDaoInputParameter<ushort?> Value(ushort? value);
        IDaoInputParameter<uint> Value(uint value);
        IDaoInputParameter<uint?> Value(uint? value);
        IDaoInputParameter<ulong> Value(ulong value);
        IDaoInputParameter<ulong?> Value(ulong? value);

        IDaoInputParameter<byte> Values(IEnumerable<byte> values);
        IDaoInputParameter<byte[]> Values(IEnumerable<byte[]> values);
        IDaoInputParameter<byte?> Values(IEnumerable<byte?> values);
        IDaoInputParameter<DateTime> Values(IEnumerable<DateTime> values);
        IDaoInputParameter<DateTime?> Values(IEnumerable<DateTime?> values);
        IDaoInputParameter<decimal> Values(IEnumerable<decimal> values);
        IDaoInputParameter<decimal?> Values(IEnumerable<decimal?> values);
        IDaoInputParameter<double> Values(IEnumerable<double> values);
        IDaoInputParameter<double?> Values(IEnumerable<double?> values);
        IDaoInputParameter<short> Values(IEnumerable<short> values);
        IDaoInputParameter<short?> Values(IEnumerable<short?> values);
        IDaoInputParameter<int> Values(IEnumerable<int> values);
        IDaoInputParameter<int?> Values(IEnumerable<int?> values);
        IDaoInputParameter<long> Values(IEnumerable<long> values);
        IDaoInputParameter<long?> Values(IEnumerable<long?> values);
        IDaoInputParameter<sbyte> Values(IEnumerable<sbyte> values);
        IDaoInputParameter<sbyte?> Values(IEnumerable<sbyte?> values);
        IDaoInputParameter<float> Values(IEnumerable<float> values);
        IDaoInputParameter<float?> Values(IEnumerable<float?> values);
        IDaoInputParameter<string> Values(IEnumerable<string> values);
        IDaoInputParameter<ushort> Values(IEnumerable<ushort> values);
        IDaoInputParameter<ushort?> Values(IEnumerable<ushort?> values);
        IDaoInputParameter<uint> Values(IEnumerable<uint> values);
        IDaoInputParameter<uint?> Values(IEnumerable<uint?> values);
        IDaoInputParameter<ulong> Values(IEnumerable<ulong> values);
        IDaoInputParameter<ulong?> Values(IEnumerable<ulong?> values);
    }
}
