'use strict';

require('babel/register');

const React = require('react');
const Router = require('react-router');
const app = require('../share');

const dehydratedState = window.App; // Sent from the server
const NavigateAction = require('../share/actions/NavigateAction');

var RenderApp = (context, Handler) => {
  var Component = React.createFactory(Handler);
  React.render(Component({context: context.getComponentContext()}), document.getElementById('app'));
};

app.rehydrate(dehydratedState, (err, context) => {
  if (err) {
    throw err;
  } else {
    var firstRender = true;
    Router.run(app.getComponent(), Router.HistoryLocation, (Handler, state) => {
      if (firstRender) {
        RenderApp(context, Handler);
        firstRender = false;
      } else {
        context.executeAction(NavigateAction, state, () => {
          RenderApp(context, Handler);
        });
      }
    });
  }
});
