import { Template } from 'meteor/templating';
import { Session } from 'meteor/session';
import { ReactiveVar } from 'meteor/reactive-var';

// http://getbootstrap.com/javascript/#modals

let isPast = ( date ) => {
    let today = moment().format();
    return moment( today ).isAfter( date );
};

let getSaison = ( month ) => {
    if(month >= 3 && month <= 8)
      return 'Été';
    else // sinon on est en hiver
      return 'Hiver';
}

let getSaisonNumber = ( month, year ) => {
    let saison = getSaison(month);
    let nbr;

    // le cas particulier
    if(saison == 'Hiver' && month < 3)
        year = year-1;

    // si on est en été
    if(month >= 3 && month <= 8)
        sem = 1;
    else // sinon on est en hiver
        sem = 2;

   if(year < 2017)
       return (0);
   else
       return ( (year-2017)*2 + sem );
}

Template.calendar.onRendered( () => {

    // définition du calendar
    $( '#Calendar' ).fullCalendar({
        // Methode events()
        events( start, end, timezone, callback ) {
            let data = Events.find().fetch().map( ( event ) => {
                event.editable = !isPast( event.start );
                return event;
            });

            if ( data ) {
                // une fois que l'on a récupéré les données
                // on les retransmet à fullcalendar en utilisant le callback
                callback( data );
            }
        },

        // Methode eventRender
        eventRender( event, element ) {
            element.find( '.fc-content' ).html(
                `<h4>${ event.title }</h4>
                 <p class="type-${ event.type }">#${ event.type }</p>
                `
            );
        },

        eventDrop( event, delta, revert ) {
            let date = event.start.format();
            if ( !isPast( date ) ) {
                let update = {
                  _id: event._id,
                  start: date,
                  end: date
                };

                Meteor.call( 'editEvent', update, ( error ) => {
                    if ( error ) {
                        Bert.alert( error.reason, 'danger' );
                    }
                });
            }
            else {
                revert();
                Bert.alert( 'Sorry, you can\'t move items to the past!', 'danger' );
            }
        },

        // Methode dayClick
        dayClick( date ) {
            Session.set( 'eventModal', { type: 'add', date: date.format() } );
            $( '#add-edit-event-modal' ).modal( 'show' );
        },

        // Methode eventClick
        eventClick( event ) {
            Session.set( 'eventModal', { type: 'edit', event: event._id } );
            $( '#add-edit-event-modal' ).modal( 'show' );
        }
    });

    $('#Calendar').click(function() {

        let moment = $("#Calendar").fullCalendar('getDate');
        let month = moment.get('month') + 1;
        let year = moment.get('year');
        let saison = getSaison( month );
        let txt;
        if(saison == 'Hiver')
            if(month < 3)
                txt = saison + ' ' + (year-1) + '/' + year;
            else
                txt = saison + ' ' + year + '/' + (year+1);
        else
            txt = saison + ' ' + year;

        txt = txt + ' / Saison n°' + getSaisonNumber(month,year);

        $('#Infos').html( txt );

        Meteor.call('seasonReady', month, year,function(error,retour){
            txt = '  <img src="/images/' +
            (retour ? 'ready' : 'locked') +
            '.png" alt="seasonReady" style="width:33px;height:33px;" />';

            txt2 = ' <span id="infobulle" style="display:inline-block;padding:3px 2px 1px 2px;height:25px;color:'+ (retour ? 'green' : 'red') +';border:2px solid '+ (retour ? 'green' : 'red') +';position:relative;right:5px;background-color:white;">' +
            (retour ? 'Cette saison est ouverte à la réservation!' : 'Cette saison est bloquée pour le moment.') +
            '</span>';

            $('#Season').html( txt );
            $('#Infobulle').html( txt2 );
        });

    });

    $('#Calendar').trigger('click');

    Tracker.autorun( () => {
        Events.find().fetch();
        // relance la méthode events
        $( '#Calendar' ).fullCalendar( 'refetchEvents' );
    });

});
