import { Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import {
  UPDATE_LISTENER_TYPE_METADATA,
  UPDATE_METADATA,
  UPDATE_LISTENER_OPTIONS_METADATA,
} from './telegraf.constants';
import { ListenerType } from './enums';

@Injectable()
export class TelegrafMetadataAccessor {
  constructor(private readonly reflector: Reflector) {}

  isUpdate(target: Function): boolean {
    return !!this.reflector.get<true | undefined>(UPDATE_METADATA, target);
  }

  getListenerType(target: Function): ListenerType | undefined {
    return this.reflector.get<ListenerType>(
      UPDATE_LISTENER_TYPE_METADATA,
      target,
    );
  }

  getListenerOptions(target: Function): unknown | undefined {
    return this.reflector.get<unknown>(
      UPDATE_LISTENER_OPTIONS_METADATA,
      target,
    );
  }
}