import ngModule from '../module';
import Component from 'core/lib/component';

class Controller extends Component {
    constructor($element, $) {
        super($element, $);
        this.order = {};
        this.clientFk = this.$params.clientFk;
    }

    $onInit() {
        if (this.$params && this.$params.clientFk)
            this.clientFk = this.$params.clientFk;
    }

    set order(value) {
        if (value)
            this._order = value;
    }

    get order() {
        return this._order;
    }

    set clientFk(value) {
        this.order.clientFk = value;

        if (value) {
            let filter = {
                include: {
                    relation: 'defaultAddress',
                    scope: {
                        fields: 'id'
                    }
                },
                where: {id: value}
            };
            filter = encodeURIComponent(JSON.stringify(filter));
            let query = `Clients?filter=${filter}`;
            this.$http.get(query).then(res => {
                if (res.data) {
                    let client = res.data[0];
                    let defaultAddress = client.defaultAddress;
                    this.addressFk = defaultAddress.id;
                }
            });
        } else
            this.addressFk = null;
    }

    get clientFk() {
        return this.order.clientFk;
    }

    set addressFk(value) {
        this.order.addressFk = value;
        this.getAvailableAgencies();
    }

    get addressFk() {
        return this.order.addressFk;
    }

    set landed(value) {
        this.order.landed = value;
        this.getAvailableAgencies();
    }

    get landed() {
        return this.order.landed;
    }

    get warehouseFk() {
        return this.order.warehouseFk;
    }

    getAvailableAgencies() {
        let order = this.order;
        order.agencyModeFk = null;

        let params = {
            addressFk: order.addressFk,
            landed: order.landed
        };
        if (params.landed && params.addressFk) {
            this.$http.get(`Agencies/landsThatDay`, {params})
                .then(res => this._availableAgencies = res.data);
        }
    }

    onSubmit() {
        this.createOrder();
    }

    createOrder() {
        let params = {
            landed: this.order.landed,
            addressId: this.order.addressFk,
            agencyModeId: this.order.agencyModeFk
        };
        this.$http.post(`Orders/new`, params).then(res => {
            this.vnApp.showSuccess(this.$t('Data saved!'));
            this.$state.go('order.card.catalog', {id: res.data});
        });
    }
}

ngModule.vnComponent('vnOrderCreateCard', {
    template: require('./card.html'),
    controller: Controller,
    bindings: {
        order: '<?'
    }
});