/*
 * https://github.com/morethanwords/tweb
 * Copyright (C) 2019-2021 Eduard Kuzmenko
 * https://github.com/morethanwords/tweb/blob/master/LICENSE
 */

import { attachClickEvent, AttachClickOptions, cancelEvent, CLICK_EVENT_NAME } from "../helpers/dom";
import ListenerSetter from "../helpers/listenerSetter";
import { i18n, LangPackKey } from "../lib/langPack";
import CheckboxField from "./checkboxField";
import { closeBtnMenu } from "./misc";
import { ripple } from "./ripple";

export type ButtonMenuItemOptions = {
  icon: string, 
  text: LangPackKey, 
  onClick: (e: MouseEvent | TouchEvent) => void, 
  element?: HTMLElement,
  options?: AttachClickOptions,
  checkboxField?: CheckboxField,
  /* , cancelEvent?: true */
};

const ButtonMenuItem = (options: ButtonMenuItemOptions) => {
  if(options.element) return options.element;

  const {icon, text, onClick} = options;
  const el = document.createElement('div');
  el.className = 'btn-menu-item tgico-' + icon;
  ripple(el);
  const t = i18n(text);
  t.classList.add('btn-menu-item-text');
  el.append(t);

  if(options.checkboxField) {
    el.append(options.checkboxField.label);
    attachClickEvent(el, () => {
      options.checkboxField.checked = !options.checkboxField.checked;
    }, options.options);
  }

  // * cancel keyboard close
  attachClickEvent(el, CLICK_EVENT_NAME !== 'click' ? (e) => {
    cancelEvent(e);
    onClick(e);
    closeBtnMenu();
  } : onClick, options.options);

  return options.element = el;
};

const ButtonMenu = (buttons: ButtonMenuItemOptions[], listenerSetter?: ListenerSetter) => {
  const el = document.createElement('div');
  el.classList.add('btn-menu');

  if(listenerSetter) {
    buttons.forEach(b => {
      if(b.options) {
        b.options.listenerSetter = listenerSetter;
      } else {
        b.options = {listenerSetter};
      }
    });
  }

  const items = buttons.map(ButtonMenuItem);

  el.append(...items);

  return el;
};

export default ButtonMenu;
