/**
 * @module CalendarEvent
 */

import { RcmailDialogButton } from '../../classes/modal.js';
import { EventView } from './event_view.js';

/**
 * Classe qui génère la fenêtre de dialogue pour la création ou la modification d'un événement.
 * @class
 * @classdesc Met en forme les données utiles à la fenêtre de dialog avant d'ouvrir la dialog. Mettre le code lié dans la fonction `_main`.
 * @see {@link CalendarEvent~_main}
 */
export class CalendarEvent {
  /**
   *
   * @param {*} event Objet évènement du plugin calendar
   * @param {external:jQuery | GlobalModal} dialog Dialog jquery ou GlobalModal
   */
  constructor(event, dialog) {
    /**
     * @member
     * @type {EventView} Vue de l'évènement
     */
    this.view = this._main(event, dialog);
  }

  /**
   * C'est ici que l'on va éffectuer toute les actions nécessaires à la création de la fenêtre de dialog.
   * @private
   * @param {*} calEvent Objet évènement du plugin calendar
   * @param {external:jQuery | GlobalModal} $dialog Dialog jquery ou GlobalModal
   * @returns {EventView} Vue créée
   */
  _main(calEvent, $dialog) {
    if (!calEvent) calEvent = cal.selected_event;
    if (!$dialog)
      $dialog =
        window.kolab_event_dialog_element ??
        parent.kolab_event_dialog_element ??
        top.kolab_event_dialog_element;

    const args = rcmail.triggerEvent('on.calendar-event.before', {
      calEvent,
      $dialog,
      caller: this,
      eventView: EventView,
    });

    return (args?.eventView ?? EventView).Start(calEvent, $dialog);
  }

  /**
   * Lance une dialogue d'évènement
   * @static
   * @param {*} event Objet évènement du plugin calendar
   * @param {external:jQuery | GlobalModal} dialog Dialog jquery ou GlobalModal
   * @returns {CalendarEvent}
   */
  static Start(event, dialog) {
    return new CalendarEvent(event, dialog);
  }
}