import ngModule from '../module';
import './style.scss';

class Controller {
    constructor($state, $scope, $http, $translate, vnApp, aclService) {
        this.$state = $state;
        this.$scope = $scope;
        this.$http = $http;
        this.$translate = $translate;
        this.vnApp = vnApp;
        this.aclService = aclService;
        this.filter = {
            where: {claimFk: $state.params.id},
            include: [
                {
                    relation: 'sale',
                    scope: {
                        fields: ['concept', 'ticketFk', 'price', 'quantity', 'discount', 'itemFk'],
                        include: {
                            relation: 'ticket'
                        }
                    }
                }
            ]
        };
    }

    set salesClaimed(value) {
        this._salesClaimed = value;

        if (value)
            this.calculateTotals();
    }

    get salesClaimed() {
        return this._salesClaimed;
    }

    openAddSalesDialog() {
        this.getClaimableFromTicket();
        this.$scope.addSales.show();
    }

    getClaimableFromTicket() {
        let config = {params: {ticketFk: this.claim.ticketFk}};
        let query = `/api/Sales/getClaimableFromTicket`;
        this.$http.get(query, config).then(res => {
            if (res.data)
                this.salesToClaim = res.data;
        });
    }

    addClaimedSale(index) {
        let sale = this.salesToClaim[index];
        let saleToAdd = {saleFk: sale.saleFk, claimFk: this.claim.id, quantity: sale.quantity};
        let query = `claim/api/ClaimBeginnings/`;
        this.$http.post(query, saleToAdd).then(() => {
            this.$scope.addSales.hide();
            this.$scope.model.refresh();
            this.vnApp.showSuccess(this.$translate.instant('Data saved!'));

            if (this.aclService.hasAny(['salesAssistant']))
                this.$state.go('claim.card.development');
        });
    }

    deleteClaimedSale(index) {
        let sale = this.salesClaimed[index];
        let query = `claim/api/ClaimBeginnings/${sale.id}`;
        this.$http.delete(query).then(() => {
            this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
            this.$scope.model.remove(index);
            this.calculateTotals();
        });
    }

    setClaimedQuantity(id, claimedQuantity) {
        let params = {id: id, quantity: claimedQuantity};
        let query = `claim/api/ClaimBeginnings/`;
        this.$http.patch(query, params).then(() => {
            this.vnApp.showSuccess(this.$translate.instant('Data saved!'));
            this.calculateTotals();
        });
    }

    calculateTotals() {
        this.paidTotal = 0.0;
        this.claimedTotal = 0.0;
        if (!this._salesClaimed) return;

        this._salesClaimed.forEach(sale => {
            let orgSale = sale.sale;
            this.paidTotal += this.getSaleTotal(orgSale);
            this.claimedTotal += sale.quantity * orgSale.price - ((orgSale.discount * (sale.quantity * orgSale.price)) / 100);
        });
    }

    getSaleTotal(sale) {
        let total = 0.0;
        total += sale.quantity * sale.price - ((sale.discount * (sale.quantity * sale.price)) / 100);
        return total;
    }

    // Item Descriptor
    showDescriptor(event, itemFk) {
        this.quicklinks = {
            btnThree: {
                icon: 'icon-transaction',
                state: `item.card.diary({
                        id: ${itemFk}
                    })`,
                tooltip: 'Item diary'
            }
        };
        this.$scope.descriptor.itemFk = itemFk;
        this.$scope.descriptor.parent = event.target;
        this.$scope.descriptor.show();
    }
}

Controller.$inject = ['$state', '$scope', '$http', '$translate', 'vnApp', 'aclService'];

ngModule.component('vnClaimDetail', {
    template: require('./index.html'),
    controller: Controller,
    bindings: {
        claim: '<'
    }
});