<!DOCTYPE html>
<html>

<head>
  <link href="//cdn.jsdelivr.net/picnicss/4.1.1/picnic.min.css" rel="stylesheet">
  <style>
    li:empty {
      list-style-type: none;
    }
  </style>
</head>

<body>

  <h1>Hello Mag.JS - Redux remote!</h1>
  <a target="_tab" href="https://github.com/magnumjs/mag.js">GitHub</a>
  <hr/>

  <div id="todos">
    <div>
      <input>
      <button name="add">Add</button>
      <button name="reset">Reset</button>
      <ul>
        <li></li>
      </ul>
    </div>
  </div>

  <script src="//cdn.rawgit.com/MaxArt2501/object-observe/master/dist/object-observe.min.js"></script>
  <script src="//rawgit.com/magnumjs/mag.js/master/dist/mag.0.21.2.min.js"></script>
  <script src="//rawgit.com/magnumjs/mag.js/master/dist/mag.addons.0.21.min.js"></script>
  <script src="//rawgit.com/magnumjs/mag.js/master/dist/mag-redux.0.21.min.js"></script>
  <script src="//rawgit.com/magnumjs/mag.js/master/src/addons/redux-middleware.js"></script>
  <script src="//rawgit.com/magnumjs/mag.js/master/src/addons/redux-remote.js"></script>

  <script src="mag-mod.js"></script>
  <script src="mag-redux-mod.js"></script>
</body>

</html>
var Todos = {}

Todos.controller = function(props) {
  this.input = ''
}

Todos.view = function(state, props) {

  state.li = props.todos || []

  state.reset = {
    _onClick: props.reset
  }

  state.add = {
    _onClick: function() {
      props.addTodo(state.input)
      state.input = ''
    }
  }
}
//Types:
var types = {
  ADD_TODO: 'ADD_TODO',
  RESET: 'RESET'
}


// Action:
var actions = {
  reset: {
    type: types.RESET
  },
  addTodo: {
    type: types.ADD_TODO,
    text: ''
  }
}

// Reducer:
var todos = function(state, action) {
  switch (action.type) {
    case types.RESET:
      return [];
    case types.ADD_TODO:
      return state.concat([action.text]);
    default:
      return state || [];
  }
}


//Create remote reducer with existing reducer
var remoter = Redux.remoteReducer({
  source: 'https://api.myjson.com/bins/1dhbc', // remote source url for our data
  types: types, // action types to merge with
  actions: actions, // actions to merge with
  reducer: todos // reducer
});

//Convert reducer to remote:
var reducers = {todos : remoter.reducer};

//Required middleware for remoteRedux:
var middleware = [Redux.middle.readyStatePromise]

//Connect Component:
var App = mag.reduxConnect({},
  actions, reducers, middleware
)('todos', Todos);

//Init remoter:
remoter.init(App)

//Start component:
var modInstance = App({
  anotherThing: true
})