'use strict';

var React = require('react');
var RouteHandler = require('./components/RouteHandler');
var PropTypes = require('./PropTypes');

exports.Nested = React.createClass({
  displayName: 'Nested',

  render: function render() {
    return React.createElement(
      'div',
      null,
      React.createElement(
        'h1',
        { className: 'Nested' },
        'Nested'
      ),
      React.createElement(RouteHandler, null)
    );
  }
});

exports.Foo = React.createClass({
  displayName: 'Foo',

  render: function render() {
    return React.createElement(
      'div',
      { className: 'Foo' },
      'Foo'
    );
  }
});

exports.Bar = React.createClass({
  displayName: 'Bar',

  render: function render() {
    return React.createElement(
      'div',
      { className: 'Bar' },
      'Bar'
    );
  }
});

exports.Baz = React.createClass({
  displayName: 'Baz',

  render: function render() {
    return React.createElement(
      'div',
      { className: 'Baz' },
      'Baz'
    );
  }
});

exports.Async = React.createClass({
  displayName: 'Async',

  statics: {
    delay: 10,

    willTransitionTo: function willTransitionTo(transition, params, query, callback) {
      setTimeout(callback, exports.Async.delay);
    }
  },

  render: function render() {
    return React.createElement(
      'div',
      { className: 'Async' },
      'Async'
    );
  }
});

exports.RedirectToFoo = React.createClass({
  displayName: 'RedirectToFoo',

  statics: {
    willTransitionTo: function willTransitionTo(transition) {
      transition.redirect('/foo');
    }
  },

  render: function render() {
    return null;
  }
});

exports.RedirectToFooAsync = React.createClass({
  displayName: 'RedirectToFooAsync',

  statics: {
    delay: 10,

    willTransitionTo: function willTransitionTo(transition, params, query, callback) {
      setTimeout(function () {
        transition.redirect('/foo');
        callback();
      }, exports.RedirectToFooAsync.delay);
    }
  },

  render: function render() {
    return null;
  }
});

exports.Abort = React.createClass({
  displayName: 'Abort',

  statics: {
    willTransitionTo: function willTransitionTo(transition) {
      transition.abort();
    }
  },

  render: function render() {
    return null;
  }
});

exports.AbortAsync = React.createClass({
  displayName: 'AbortAsync',

  statics: {
    delay: 10,

    willTransitionTo: function willTransitionTo(transition, params, query, callback) {
      setTimeout(function () {
        transition.abort();
        callback();
      }, exports.AbortAsync.delay);
    }
  },

  render: function render() {
    return null;
  }
});

exports.EchoFooProp = React.createClass({
  displayName: 'EchoFooProp',

  render: function render() {
    return React.createElement(
      'div',
      null,
      this.props.foo
    );
  }
});

exports.EchoBarParam = React.createClass({
  displayName: 'EchoBarParam',

  contextTypes: {
    router: PropTypes.router.isRequired
  },
  render: function render() {
    return React.createElement(
      'div',
      { className: 'EchoBarParam' },
      this.context.router.getCurrentParams().bar
    );
  }
});