/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
/*jshint browser:true jquery:true expr:true*/
define([
    "jquery",
    "jquery/ui",
    "Magento_Catalog/js/price-box"
], function($){
    "use strict";
    
    $.widget('mage.downloadable', {
        options: {
            priceHolderSelector: '.price-box'
        },

        _create: function() {
            var self = this;

            this.element.find(this.options.linkElement).on('change', $.proxy(function() {
                this._reloadPrice();
            }, this));

            this.element.find(this.options.allElements).on('change', function() {
                if (this.checked) {
                    $('label[for="' + this.id + '"] > span').text($(this).attr('data-checked'));
                    self.element.find(self.options.linkElement + ':not(:checked)').each(function(){
                        $(this).trigger('click');
                    });
                } else {
                    $('[for="' + this.id + '"] > span').text($(this).attr('data-notchecked'));
                    self.element.find(self.options.linkElement + ':checked').each(function(){
                        $(this).trigger('click');
                    });
                }
            });
        },

        /**
         * Reload product price with selected link price included
         * @private
         */
        _reloadPrice: function() {
            var finalPrice = 0;
            var basePrice = 0;
            this.element.find(this.options.linkElement + ':checked').each($.proxy(function(index, element) {
                finalPrice += this.options.config.links[$(element).val()].finalPrice;
                basePrice += this.options.config.links[$(element).val()].basePrice;
            }, this));

            $(this.options.priceHolderSelector).trigger('updatePrice', {
                'prices': {
                    'finalPrice': { 'amount': finalPrice },
                    'basePrice': { 'amount': basePrice }
                }
            });
        }
    });
    
    return $.mage.downloadable;
});