import ngModule from '../module';
import './style.scss';

class Controller {
    constructor($scope, $http) {
        this.$scope = $scope;
        this.$http = $http;
        this.months = this.monthsOfYear();
        this.events = [];
    }

    get worker() {
        return this._worker;
    }

    set worker(value) {
        this._worker = value;

        if (!value) return;

        let params = {params: {
            workerFk: this.worker.id,
            started: this.started,
            ended: this.ended
        }};

        let query = `/worker/api/WorkerCalendars/absences`;
        this.$http.get(query, params).then(res => {
            if (!res.data) return;

            this.setHolidays(res.data);
            this.setWorkerCalendar(res.data);
            this.calendar = res.data.calendar;
        });
    }

    setHolidays(data) {
        if (!data.holidays) return;

        const holidays = data.holidays;
        const events = [];
        holidays.forEach(holiday => {
            events.push({
                dated: holiday.dated,
                className: 'red',
                title: holiday.detail.description || holiday.type.name,
                isRemovable: false
            });
        });
        this.events = this.events.concat(events);
    }

    setWorkerCalendar(data) {
        if (!data.absences) return;

        const absences = data.absences;
        const events = [];
        absences.forEach(absence => {
            const absenceType = absence.absenceType;
            events.push({
                dated: absence.dated,
                title: absenceType.name,
                style: {
                    background: absenceType.rgb
                }
            });
        });
        this.events = this.events.concat(events);
    }

    get started() {
        const started = new Date();
        started.setHours(0, 0, 0, 0);
        started.setMonth(0);
        started.setDate(1);

        return started;
    }

    get ended() {
        const monthIndex = 11;
        const ended = new Date();
        ended.setHours(0, 0, 0, 0);
        ended.setMonth(monthIndex + 1);
        // Last day of previous month (January)
        ended.setDate(0);

        return ended;
    }

    monthsOfYear() {
        let months = new Array(12);

        for (let i = 0; i < months.length; i++) {
            const now = new Date();
            now.setHours(0, 0, 0, 0);
            now.setMonth(i);
            now.setDate(1);

            months[i] = now;
        }

        return months;
    }
}

Controller.$inject = ['$scope', '$http'];

ngModule.component('vnWorkerCalendar', {
    template: require('./index.html'),
    controller: Controller,
    bindings: {
        worker: '<'
    }
});