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

export default class Controller extends Section {
    saveBuy(buy) {
        const missingData = !buy.itemFk || !buy.quantity || !buy.packagingFk;
        if (missingData) return;

        let options;
        if (buy.id) {
            options = {
                query: `Buys/${buy.id}`,
                method: 'patch'
            };
        }
        this.$http[options.method](options.query, buy).then(res => {
            if (!res.data) return;

            buy = Object.assign(buy, res.data);
            this.vnApp.showSuccess(this.$t('Data saved!'));
        });
    }

    /**
     * Returns checked instances
     *
     * @return {Array} Checked instances
     */
    selectedBuys() {
        if (!this.buys) return;

        return this.buys.filter(buy => {
            return buy.checked;
        });
    }

    deleteBuys() {
        const buys = this.selectedBuys();
        const actualInstances = buys.filter(buy => buy.id);

        const params = {buys: actualInstances};

        if (actualInstances.length) {
            this.$http.post(`Buys/deleteBuys`, params).then(() => {
                this.vnApp.showSuccess(this.$t('Data saved!'));
            });
        }
        buys.forEach(buy => {
            const index = this.buys.indexOf(buy);
            this.buys.splice(index, 1);
        });
    }

    toggleGroupingMode(buy, mode) {
        const groupingMode = mode === 'grouping' ? mode : 'packing';
        const newGroupingMode = buy.groupingMode === groupingMode ? null : groupingMode;
        const params = {
            groupingMode: newGroupingMode
        };

        this.$http.patch(`Buys/${buy.id}`, params).then(() => {
            buy.groupingMode = newGroupingMode;
            this.vnApp.showSuccess(this.$t('Data saved!'));
        });
    }

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

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