import ngModule from '../module';
import UserError from 'core/lib/user-error';

class Controller {
    constructor($http, $scope, $stateParams, vnApp, $translate, $element) {
        this.$http = $http;
        this.$scope = $scope;
        this.$stateParams = $stateParams;
        this.vnApp = vnApp;
        this.$translate = $translate;
        this.$element = $element;
        this.services = [];
    }

    $onInit() {
        this.getDefaultTaxClass();
    }

    getDefaultTaxClass() {
        let filter = {
            where: {code: 'G'}
        };
        this.$http.get('TaxClasses/findOne', {filter})
            .then(res => this.defaultTaxClass = res.data);
    }

    add() {
        if (this.defaultTaxClass) {
            this.$scope.model.insert({
                taxClassFk: this.defaultTaxClass.id,
                quantity: 1,
                ticketFk: this.$stateParams.id
            });
        }
    }

    onNewServiceTypeOpen() {
        this.newServiceType = {};
    }

    newServiceTypeDialog(elementIndex, event) {
        event.preventDefault();
        this.$scope.createServiceTypeDialog.show();
        this.currentServiceIndex = elementIndex;
    }

    onNewServiceTypeResponse(response) {
        if (response == 'accept') {
            if (!this.newServiceType.name)
                throw new UserError(`Name can't be empty`);

            this.$http.post(`TicketServiceTypes`, this.newServiceType).then(response => {
                this.services[this.currentServiceIndex].ticketServiceTypeFk = response.data.id;
            });
        }
    }

    onSubmit() {
        this.$scope.watcher.check();

        this.$scope.model.save().then(() => {
            this.$scope.watcher.notifySaved();
            this.$scope.model.refresh();
        });
    }
}

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

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