var AppDispatcher = require('../dispatcher/appDispatcher');
var EventEmitter = require('events').EventEmitter;

var CategoryCollection = require('../models/categoryCollection');
var Category = require('../models/category');

var CategoryConstants = require('../constants/categoryConstants');
var _ = require('underscore');

var _categoryDetails = new Category();

//var loadSections = function() { 
  //var sections = new SectionCollection();
  //sections.fetch({success: function() {
    //sectionState.sections = sections.models;
    //// change will be called automatically when
    //// action is run but we need to emit it again
    //// when the data arive 
    //// it's a bit "unfluxy" but convenient.
    //// "true philosophy" would be to run another "data arrived" action
    //SectionStore.emitChange(); 
  //}});
//};

var loadCategoryDetails = function(categoryId) {
  var category = new Category({id : categoryId});
  category.fetch({
    success: function() {
      _categoryDetails = category;
      CategoryStore.emitChange();
    }
  });
};

//var setHovered  = function(id) {
  //sectionState.hoveredSection = id;
//}


// Extend SectionStore with EventEmitter to add eventing capabilities
var CategoryStore = _.extend({}, EventEmitter.prototype, {

    getCategoryDetails: function() {
      return _categoryDetails;
    },
    // Emit Change event
    emitChange: function() {

      this.emit('change');
    },

    // Add change listener
    addChangeListener: function(callback) {
      this.on('change', callback);
    },

    // Remove change listener
    removeChangeListener: function(callback) {
      this.removeListener('change', callback);
    }
});


// Register callback with AppDispatcher
AppDispatcher.register(function(payload) {
  var action = payload.action;
  var text;

  switch(action.actionType) {

    // Respond to SELECT_ITEM action
    //case SectionConstants.LOAD_SECTIONS:
      //loadSections();      
      //break;

    //case SectionConstants.SET_SECTION_HOVER:
      //setHovered(action.section.get('id'));
      //break;

    //case SectionConstants.UNSET_SECTION_HOVER:
      //setHovered('');
      //break;

    case CategoryConstants.LOAD_CATEGORY_DETAILS:
      loadCategoryDetails(action.categoryId);
      break;

    default:
      return true;
  }

  // If action was responded to, emit change event
  CategoryStore.emitChange();
  return true;

});

module.exports = CategoryStore;
