import { SetMetadata } from '@nestjs/common';
import { DECORATORS } from '../telegraf.constants';
import { UpdateType, MessageSubTypes } from 'telegraf/typings/telegram-types';

export type TelegrafOnUpdateTypes =
  | UpdateType
  | UpdateType[]
  | MessageSubTypes
  | MessageSubTypes[];

export interface TelegrafOnMetadata {
  updateTypes: TelegrafOnUpdateTypes;
}

/**
 * Registers middleware for provided update type.
 * @param updateTypes Update type
 *
 * https://telegraf.js.org/#/?id=on
 */
export function TelegrafOn(
  updateTypes: TelegrafOnUpdateTypes,
): MethodDecorator {
  return SetMetadata(DECORATORS.ON, { updateTypes: updateTypes });
}