DishOption = function(data, idx, prnt) {
  this.idx = idx;
  this.prnt = prnt;
  this.data = {};
  
  for (var key in data) {
    this.data[key] = data[key];
  }
  this.selected = this.data.by_default || false;
};

DishOption.prototype = {
  path: function() {
    return this.prnt.path() + '_' + this.idx;
  },
  related_options: function() {
    if(!this.data.dish_option_collection) return [];
  },
  price: function() {
    return (this.data.price || 0) + (this.prnt.data.price || 0);
  },
  select: function() {
    if(this.prnt.data.select_type.match(/^(radio|select)/)) {
      _.each(this.prnt.options, function(o){o.selected = false})
    }
    this.selected = true;
    var dish = this.prnt.prnt,
        siblingsHaveDependent = _.any(this.prnt.options, function(o) { return dish.dependent_groups[o.path()]}, this);
        
    if(dish.dependent_groups[this.path()]) {
        // Make sure dependent option groups are visisble
      _.each(dish.optionGroups, function(g){
        g.visible = _.include(dish.defaultOptionGroups.concat(dish.dependent_groups[this.path()]), g.path());
      }, this);
    } else if(siblingsHaveDependent){
      _.each(dish.optionGroups, function(g){
        g.visible = _.include(dish.defaultOptionGroups, g.path());
      }, this);        
    }
  },
  deselect: function() {
    this.selected = false;
    var dish = this.prnt.prnt;
    if(dish.dependent_groups[this.path()]) {
      _.each(dish.optionGroups, function(g){
        g.visible = _.include(dish.dependent_groups[this.path()], g.path());
      }, this);
    }
  }
};

