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

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

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

        this.warehouseId = this.vnConfig.warehouseFk;
    }

    get ticket() {
        return this._ticket;
    }

    set ticket(value) {
        if (value)
            this._ticket = value;
    }

    get clientId() {
        return this.ticket.clientFk;
    }

    set clientId(value) {
        this.ticket.clientFk = value;

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

    get addressId() {
        return this.ticket.addressFk;
    }

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

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

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

    get warehouseId() {
        return this.ticket.warehouseFk;
    }

    set warehouseId(value) {
        this.ticket.warehouseFk = value;
        this.getAvailableAgencies();
    }

    get agencyModeId() {
        return this.ticket.agencyModeFk;
    }

    set agencyModeId(value) {
        this.ticket.agencyModeFk = value;
    }

    getAvailableAgencies() {
        let ticket = this.ticket;
        let params = {
            warehouseFk: ticket.warehouseFk,
            addressFk: ticket.addressFk,
            landed: ticket.landed
        };

        if (params.warehouseFk && params.addressFk && params.landed) {
            ticket.agencyModeFk = null;

            this.$http.get(`Agencies/getAgenciesWithWarehouse`, {params}).then(res => {
                this.agencies = res.data;
                const defaultAgency = this.agencies.find(agency=> {
                    return agency.agencyModeFk == this.defaultAddress.agencyModeFk;
                });
                if (defaultAgency)
                    this.agencyModeId = defaultAgency.agencyModeFk;
            });
        }
    }

    onSubmit() {
        this.createTicket();
    }

    createTicket() {
        let params = {
            clientId: this.ticket.clientFk,
            landed: this.ticket.landed,
            addressId: this.ticket.addressFk,
            agencyModeId: this.ticket.agencyModeFk,
            warehouseId: this.ticket.warehouseFk,
        };
        this.$http.post(`Tickets/new`, params).then(res => {
            this.vnApp.showSuccess(this.$t('Data saved!'));
            this.$state.go('ticket.card.summary', {id: res.data.id});
        });
    }
}

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