import flatpickr from 'flatpickr';
import { Utility } from '../../core/utility';

const DATEPICKER_UTIL_SELECTOR = 'input[type="date"], input[type="time"], input[type="datetime-local"]';

const DATEPICKER_INITIALIZED_CLASS = 'datepicker--initialized';

const DATEPICKER_CONFIG = {
  'datetime-local': {
    enableTime: true,
    altInput: true,
    altFormat: 'j. F Y, H:i', // maybe interpolate these formats for locale
    dateFormat: 'Y-m-dTH:i',
    time_24hr: true,
  },
  'date': {
    altFormat: 'j. F Y',
    dateFormat: 'Y-m-d',
    altInput: true,
  },
  'time': {
    enableTime: true,
    noCalendar: true,
    altFormat: 'H:i',
    dateFormat: 'H:i',
    altInput: true,
    time_24hr: true,
  },
};

@Utility({
  selector: DATEPICKER_UTIL_SELECTOR,
})
export class Datepicker {

  flatpickrInstance;

  constructor(element) {
    if (!element) {
      throw new Error('Datepicker utility needs to be passed an element!');
    }

    if (element.classList.contains(DATEPICKER_INITIALIZED_CLASS)) {
      return false;
    }

    const flatpickrConfig = DATEPICKER_CONFIG[element.getAttribute('type')];

    if (!flatpickrConfig) {
      throw new Error('Datepicker utility called on unsupported element!');
    }

    this.flatpickrInstance = flatpickr(element, flatpickrConfig);

    // mark initialized
    element.classList.add(DATEPICKER_INITIALIZED_CLASS);
  }

  destroy() {
    this.flatpickrInstance.destroy();
  }
}
