import ngModule from '../module';
import Section from 'salix/components/section';

class Controller extends Section {
    showIntrastat(event) {
        if (event.defaultPrevented) return;
        event.preventDefault();

        this.newIntrastat = {
            taxClassFk: this.item.taxClassFk
        };
        this.$.intrastat.show();
    }

    onIntrastatAccept() {
        const query = `Items/${this.$params.id}/createIntrastat`;
        return this.$http.patch(query, this.newIntrastat)
            .then(res => this.item.intrastatFk = res.data.id);
    }

    itemSearchFunc($search) {
        return /^\d+$/.test($search)
            ? {id: $search}
            : {name: {like: '%' + $search + '%'}};
    }

    showFilterDialog(item) {
        this.activeItem = item;
        this.itemFilterParams = {};
        this.itemFilter = {
            include: [
                {
                    relation: 'producer',
                    scope: {
                        fields: ['name']
                    }
                },
                {
                    relation: 'ink',
                    scope: {
                        fields: ['name']
                    }
                }
            ]
        };

        this.$.filterDialog.show();
    }

    selectItem(id) {
        this.activeItem['genericFk'] = id;
        this.$.filterDialog.hide();
    }

    filter() {
        const filter = this.itemFilter;
        const params = this.itemFilterParams;
        const where = {};
        for (let key in params) {
            const value = params[key];
            if (!value) continue;

            switch (key) {
            case 'name':
                where[key] = {like: `%${value}%`};
                break;
            case 'producerFk':
            case 'typeFk':
            case 'size':
            case 'inkFk':
                where[key] = value;
            }
        }

        filter.where = where;

        this.$.itemsModel.applyFilter(filter);
    }
}

ngModule.vnComponent('vnItemBasicData', {
    template: require('./index.html'),
    bindings: {
        item: '<'
    },
    controller: Controller
});