/**
 * This software is governed by the CeCILL-B license. If a copy of this license
 * is not distributed with this file, you can obtain one at
 * http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.txt
 *
 * Authors of STUdS (initial project): Guilhem BORGHESI (borghesi@unistra.fr) and Raphaël DROZ
 * Authors of Framadate/OpenSondage: Framasoft (https://github.com/framasoft)
 *
 * =============================
 *
 * Ce logiciel est régi par la licence CeCILL-B. Si une copie de cette licence
 * ne se trouve pas avec ce fichier vous pouvez l'obtenir sur
 * http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.txt
 *
 * Auteurs de STUdS (projet initial) : Guilhem BORGHESI (borghesi@unistra.fr) et Raphaël DROZ
 * Auteurs de Framadate/OpenSondage : Framasoft (https://github.com/framasoft)
 */
import $ from 'jquery';
import 'bootstrap-datepicker';

$(document).ready(function () {

    require(`../locales/bootstrap-datepicker.${lang}.js`);

    var init_datepicker = function () {
        $('.input-group.date').datepicker({
            format: window.date_formats.DATEPICKER || "dd/mm/yyyy",
            todayBtn: true,
            orientation: "top left",
            autoclose: true,
            language: lang,
            todayHighlight: true,
            beforeShowDay: function (date) {
                // Retrieve selected dates from text fields
                var selected_days = [];
                $('#selected-days').find('input[id^="day"]').each(function () {
                    if ($(this).val() != '') {
                        selected_days.push($(this).val());
                    }
                });

                // Disable selected dates in DatePicker
                for (var i = 0; i < selected_days.length; i++) {
                    var selected_date = selected_days[i].split('/');

                    if (date.getFullYear() == selected_date[2] && (date.getMonth() + 1) == selected_date[1] && date.getDate() == selected_date[0]) {
                        return {
                            classes: 'disabled selected'
                        };
                    }
                }
            }
        });
    };

    $(document).on('click', '.input-group.date .input-group-addon, .input-group.date input', function () {
        // Re-init datepicker config before displaying
        init_datepicker();
        $(this).parent().datepicker('show');

        // Trick to refresh calendar
        $('.datepicker-days .prev').trigger('click');
        $('.datepicker-days .next').trigger('click');
    });

    // Complete the date fields when use partialy fill it (eg: 15/01 could become 15/01/2016)

    var leftPad = function (text, pad) {
        return text ? pad.substring(0, pad.length - text.length) + text : text;
    };

    $(document).on('change', '.input-group.date input', function () {
        // Complete field if needed
        var val = $(this).val();
        var capture = /^([0-9]+)(?:\/([0-9]+))?$/.exec(val);

        if (capture) {
            var inputDay = leftPad(capture[1], "00"); // 5->05, 15->15
            var inputMonth = leftPad(capture[2], "00"); // 3->03, 11->11
            var inputDate = null;
            var now = new Date();

            if (inputMonth) {
                inputDate = new Date(now.getFullYear() + '-' + inputMonth + '-' + inputDay);

                // If new date is before now, add 1 year
                if (inputDate < now) {
                    inputDate.setFullYear(now.getFullYear() + 1);
                }
            } else {
                inputDate = new Date(now.getFullYear() + '-' + leftPad("" + (now.getMonth() + 1), "00") + '-' + inputDay);

                // If new date is before now, add 1 month
                if (inputDate < now) {
                    inputDate.setMonth(now.getMonth() + 1);
                }

            }

            $(this).val(inputDate.toLocaleFormat("%d/%m/%Y"));
        }
    });

});
