module.exports = {
    methods: {
        /**
         * Get the current discount for the given billable entity.
         */
        getCurrentDiscountForBillable(type, billable) {
            if (type === 'user') {
                return this.getCurrentDiscountForUser(billable);
            } else {
                return this.getCurrentDiscountForTeam(billable);
            }
        },

        /**
         * Get the current discount for the user.
         */
        getCurrentDiscountForUser(user) {
            this.currentDiscount = null;

            this.loadingCurrentDiscount = true;

            axios.get(`/coupon/user/${user.id}`)
                .then(response => {
                    if (response.status == 200) {
                        this.currentDiscount = response.data;
                    }

                    this.loadingCurrentDiscount = false;
                });
        },


        /**
         * Get the current discount for the team.
         */
        getCurrentDiscountForTeam(team) {
            this.currentDiscount = null;

            this.loadingCurrentDiscount = true;

            axios.get(`/coupon/${Spark.teamString}/${team.id}`)
                .then(response => {
                    if (response.status == 200) {
                        this.currentDiscount = response.data;
                    }

                    this.loadingCurrentDiscount = false;
                });
        },


        /**
         * Get the formatted discount amount for the given discount.
         */
        formattedDiscount(discount) {
            if ( ! discount) {
                return
            }

            if (discount.percent_off) {
                return `${discount.percent_off}%`;
            } else {
                return Vue.filter('currency')(
                    this.calculateAmountOff(discount.amount_off)
                );
            }
        },


        /**
         * Calculate the amount off for the given discount amount.
         */
        calculateAmountOff(amount) {
            return amount / 100;
        },


        /**
         * Get the formatted discount duration for the given discount.
         */
        formattedDiscountDuration(discount) {
            if ( ! discount) {
                return;
            }

            switch (discount.duration) {
                case 'forever':
                    return 'all future invoices';
                case 'once':
                    return 'a single invoice';
                case 'repeating':
                    return `all invoices during the next ${discount.duration_in_months} months`;
            }
        }
    }
};
