﻿/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

namespace DotPulsar.Internal.Abstractions;

using PulsarApi;
using System;
using System.Threading;
using System.Threading.Tasks;

public interface IConnection : IAsyncDisposable
{
    ValueTask<bool> HasChannels(CancellationToken cancellationToken);

    Task<ProducerResponse> Send(CommandProducer command, IChannel channel, CancellationToken cancellationToken);
    Task<SubscribeResponse> Send(CommandSubscribe command, IChannel channel, CancellationToken cancellationToken);

    Task Send(CommandPing command, CancellationToken cancellationToken);
    Task Send(CommandPong command, CancellationToken cancellationToken);
    Task Send(CommandAck command, CancellationToken cancellationToken);
    Task Send(CommandFlow command, CancellationToken cancellationToken);
    Task Send(CommandRedeliverUnacknowledgedMessages command, CancellationToken cancellationToken);

    Task<BaseCommand> Send(CommandUnsubscribe command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandConnect command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandLookupTopic command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandSeek command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandGetLastMessageId command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandCloseProducer command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandCloseConsumer command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(SendPackage command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandGetOrCreateSchema command, CancellationToken cancellationToken);
    Task<BaseCommand> Send(CommandPartitionedTopicMetadata command, CancellationToken cancellationToken);
}
