$(function () {
    flatpickr.l10ns.default.firstDayOfWeek = 1;
    flatpickr.l10ns.en.firstDayOfWeek = 1;
    flatpickr.l10ns.no.firstDayOfWeek = 1;

    let localeEl = document.querySelector('meta[property="og:locale"]');
    let pageLocale = localeEl ? localeEl.getAttribute('content') : '';
    let pickerLocale = pageLocale && pageLocale === 'en_GB' ? 'en' : 'no';

    let config = {
        defaultDate: 'today',
        minDate: 'today',
        position: 'auto center',
        wrap: true,
        locale: pickerLocale
    };

    let initPicker = function (pickerEl, config) {
        let arrowEl = pickerEl.getElementsByClassName('arrow')[0];
        let dateEl = pickerEl.getElementsByClassName('booking-date')[0];
        let monthEl = pickerEl.getElementsByClassName('booking-month')[0];
        config.positionElement = arrowEl;
        let setUiValues = function (date, fp) {
            dateEl.textContent = date.getDate();
            monthEl.textContent = fp.l10n.months.shorthand[fp.currentMonth];
        };
        config.onChange = function (values, _, fp) { setUiValues(values[0], fp) };
        config.onReady = function (values, _, fp) { setUiValues(values[0], fp) };
        flatpickr(pickerEl, config);
    };

    $('.from-datepicker').each(function (i, pickerEl) {
        initPicker(pickerEl, config);
    });

    config.defaultDate = config.minDate = new Date().fp_incr(1);
    $('.to-datepicker').each(function (i, pickerEl) {
        initPicker(pickerEl, config);
    });

    let msInDay = 86400000;
    // set "to" picker value = "from" picker value + 1, if "from" is greater or equal than "to"
    $('.from-datepicker').each(function (i, fromPickerEl) {
        let relatedToPicker;

        let nextParentPickers = $(fromPickerEl).parent().next().children('.to-datepicker');
        if (nextParentPickers.length) {
            relatedToPicker = nextParentPickers[0];
        }
        if (!relatedToPicker) return;

        fromPickerEl._flatpickr.config.onChange.push(function (values) {
            var val = values[0];
            var relatedToPickerVal = relatedToPicker._flatpickr.selectedDates[0];
            if (val >= relatedToPickerVal) {
                relatedToPickerVal.setTime(val.getTime() + msInDay);
                relatedToPicker._flatpickr.setDate(relatedToPickerVal, true);
            }

            var nextToValDay = new Date(val).fp_incr(1);
            relatedToPicker._flatpickr.set('minDate', nextToValDay);
        });
    });
});
