import { ModuleMetadata, Type } from '@nestjs/common/interfaces';
import { TelegrafLaunchOption, TelegrafOption } from '../telegraf.types';

export interface TelegrafModuleOptions {
  token: string;
  options?: TelegrafOption;
  launchOptions?: TelegrafLaunchOption;
}

export interface TelegrafOptionsFactory {
  createTelegrafOptions(): TelegrafModuleOptions;
}

export interface TelegrafModuleAsyncOptions
  extends Pick<ModuleMetadata, 'imports'> {
  useExisting?: Type<TelegrafOptionsFactory>;
  useClass?: Type<TelegrafOptionsFactory>;
  useFactory?: (
    ...args: any[]
  ) => Promise<TelegrafModuleOptions> | TelegrafModuleOptions;
  inject?: any[];
}