using Hcs.Broker.Api;
using Hcs.Broker.Api.Payload.HouseManagement;
using Hcs.Service.Async.HouseManagement;

namespace Hcs.Broker.Mock.Api
{
    /// <inheritdoc cref="IHouseManagementApi"/>
    public class MockHouseManagementApi : IHouseManagementApi
    {
        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<IEnumerable<exportAccountResultType>> ExportAccountAsync(string fiasHouseGuid, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return [];
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<IEnumerable<exportHouseResultType>> ExportHouseAsync(string fiasHouseGuid, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return [];
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<IEnumerable<exportSupplyResourceContractResultType>> ExportSupplyResourceContractDataAsync(CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return [];
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<exportSupplyResourceContractResultType> ExportSupplyResourceContractDataAsync(Guid contractRootGuid, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return null;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<exportSupplyResourceContractResultType> ExportSupplyResourceContractDataAsync(string contractNumber, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return null;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<IEnumerable<exportSupplyResourceContractObjectAddressResultType>> ExportSupplyResourceContractObjectAddressDataAsync(Guid contractRootGuid, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return [];
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<bool> ImportAccountDataAsync(ImportAccountDataPayload payload, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return true;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<importContractResultType> ImportContractDataAsync(ImportContractDataPayload payload, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return null;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<bool> ImportHouseUODataAsync(ImportLivingHouseUODataPayload payload, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return true;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<bool> ImportMeteringDeviceDataAsync(MeteringDeviceFullInformationType meteringDevice, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return true;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<bool> ImportNotificationDataAsync(ImportNotificationDataPayload payload, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return true;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<getStateResultImportResultCommonResultImportSupplyResourceContract> ImportSupplyResourceContractDataAsync(ImportSupplyResourceContractDataPayload payload, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return null;
        }

        /// <inheritdoc cref="IHouseManagementApi"/>
        public async Task<getStateResultImportResultCommonResultImportSupplyResourceContractProject> ImportSupplyResourceContractProjectAsync(ImportSupplyResourceContractProjectPayload payload, CancellationToken token = default)
        {
            await Task.Delay(3000, token);

            return null;
        }
    }
}
