import { OnApplicationBootstrap, OnModuleDestroy } from '@nestjs/common';
import { ClientConfigInterface } from './client-config.interface';
import { ClientConnector } from './client-connector';
import { ConnectableClient } from './connectable-client.interface';

export abstract class ClientConnectorService
  implements OnApplicationBootstrap, OnModuleDestroy
{
  private readonly connector: ClientConnector;
  protected readonly client: ConnectableClient;

  protected constructor(
    config: ClientConfigInterface,
    client: ConnectableClient,
    serviceName: string,
    context?: string,
  ) {
    this.client = client;
    this.connector = new ClientConnector(
      config,
      client,
      serviceName,
      context ?? this.constructor.name,
    );
  }

  public async onApplicationBootstrap(): Promise<void> {
    await this.connector.connect();
  }

  public onModuleDestroy(): void {
    this.connector.destroy();
  }
}
