var React = require('react');
var connect = require('react-redux').connect;
var ProfileTree = require('./profile-tree.jsx');
var DesktopAppList = require('./desktop-app-list.jsx');
var ItemForm = require('./item-form.jsx');
var IconThemeSelector = require('./icon-theme-selector.jsx');
var tree = require('../../util/tree');

var actions = require('../../store/actions');
var DragDropContext = require('react-dnd').DragDropContext;
var HTML5Backend = require('react-dnd/modules/backends/HTML5');

var EditView = React.createClass({

  componentDidMount: function() {
    this.props.dispatch(actions.edit.loadDesktopApps());
  },

  render: function() {

    return (
      <div className="edit">
        <div className="menu-bar">

        </div>
        <div className="workspace">
          <div className="left-menu">
            <IconThemeSelector onThemeSelected={this.handleThemeSelect} />
            <DesktopAppList
              theme={this.props.theme}
              desktopApps={this.props.desktopApps}
              onItemDropped={this.handleItemDrop} />
          </div>
          <ProfileTree />
          <ItemForm item={this.props.selectedItem} onItemChange={this.handleItemChange} />
        </div>
      </div>
    );

  },

  handleItemDrop: function(desktopEntry, targetItem) {

    var newProfileItem = {
      label: desktopEntry.Name,
      icon: desktopEntry.Icon,
      exec: desktopEntry.Exec
    };

    this.props.dispatch(actions.edit.addProfileItem(newProfileItem, targetItem));

  },

  handleThemeSelect: function(theme) {
    this.props.dispatch(actions.edit.useIconTheme(theme));
  },

  handleItemChange: function(item, key, value) {
    this.props.dispatch(actions.edit.updateProfileItem(item, key, value));
  }

});

function select(state) {
  return {
    desktopApps: state.desktopApps,
    profile: state.profile,
    theme: state.theme,
    selectedItem: tree.matches(state.profile, {selected: true})[0]
  };
}

module.exports = DragDropContext(HTML5Backend)(connect(select)(EditView));
