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

export default class Controller {
    constructor($scope, $state, $stateParams, $translate, $http) {
        this.$ = $scope;
        this.$http = $http;
        this.$translate = $translate;
        this.$stateParams = $stateParams;
        this.$state = $state;
        this.selectedTicket = null;
        this.moreOptions = [
            {callback: () => {
                this.goToTurns('ticket.weekly');
            }, name: 'Turns', always: true},
        ];

        if (!$stateParams.q)
            this.getScopeDays();
    }

    getScopeDays() {
        this.$http.get(`/api/TicketConfigs/findOne`).then(res => {
            if (res.data) {
                this.filter = {
                    scopeDays: res.data.scopeDays
                };
            }
        });
    }

    buildFilterDates() {
        let today = new Date();
        this.today = today.setHours(0, 0, 0, 0);

        let buildDate = new Date(today);
        buildDate.setDate(today.getDate() + this.scopeDays);
        buildDate.setHours(23, 59, 59, 999);

        this.daysOnward = buildDate;
    }

    defaultFilter() {
        this.buildFilterDates();
        this.$scope.ticketSearchbar.filter = Object.assign({}, {mine: true, from: this.today, to: this.daysOnward});
    }

    onSearch(params) {
        if (params) {
            if (params.scopeDays) {
                this.scopeDays = params.scopeDays;
                this.buildFilterDates();
                params = Object.assign(params, {from: this.today, to: this.daysOnward});
            }

            this.$.model.applyFilter(null, params);
        } else
            this.$.model.clear();
    }

    goToLines(event, ticketFk) {
        this.preventDefault(event);
        let url = this.$state.href('ticket.card.sale', {id: ticketFk}, {absolute: true});
        window.open(url, '_blank');
    }

    goToTurns() {
        this.$state.go('ticket.weekly');
    }

    onMoreOpen() {
        let options = this.moreOptions.filter(o => o.always || this.isChecked);
        this.$.moreButton.data = options;
    }

    onMoreChange(callback) {
        callback.call(this);
    }

    compareDate(date) {
        let today = new Date();
        today.setHours(0, 0, 0, 0);
        let timeTicket = new Date(date);
        timeTicket.setHours(0, 0, 0, 0);

        let comparation = today - timeTicket;

        if (comparation == 0)
            return 'warning';
        if (comparation < 0)
            return 'success';
    }

    stateColor(ticket) {
        if (ticket.alertLevelCode === 'OK')
            return 'success';
        else if (ticket.alertLevelCode === 'FREE')
            return 'notice';
        else if (ticket.alertLevel === 1)
            return 'warning';
        else if (ticket.alertLevel === 0)
            return 'alert';
    }

    showClientDescriptor(event, clientFk) {
        this.preventDefault(event);
        this.$.clientDescriptor.clientFk = clientFk;
        this.$.clientDescriptor.parent = event.target;
        this.$.clientDescriptor.show();
    }

    showWorkerDescriptor(event, userId) {
        this.preventDefault(event);
        this.selectedWorker = userId;
        this.$.workerDescriptor.parent = event.target;
        this.$.workerDescriptor.show();
    }

    preview(event, ticket) {
        this.preventDefault(event);
        this.selectedTicket = ticket;
        this.$.summary.show();
    }

    preventDefault(event) {
        event.preventDefault();
        event.stopImmediatePropagation();
    }
}

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

ngModule.component('vnTicketIndex', {
    template: require('./index.html'),
    controller: Controller
});