/**
 * Copyright (c) 2017-present, Facebook, Inc.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

const React = require('react');
const Container = require('./Container.js');
const Doc = require('./Doc.js');
const DocsSidebar = require('./DocsSidebar.js');
const OnPageNav = require('./nav/OnPageNav.js');
const Site = require('./Site.js');
const translation = require('../server/translation.js');

// component used to generate whole webpage for docs, including sidebar/header/footer
class DocsLayout extends React.Component {
  render() {
    const metadata = this.props.metadata;
    const content = this.props.children;
    const i18n = translation[this.props.metadata.language];
    let DocComponent = Doc;
    if (this.props.Doc) {
      DocComponent = this.props.Doc;
    }
    return (
      <Site
        config={this.props.config}
        className="sideNavVisible doc"
        title={
          i18n
            ? translation[this.props.metadata.language]['localized-strings'][
                this.props.metadata.localized_id
              ] || this.props.metadata.title
            : this.props.metadata.title
        }
        description={content.trim().split('\n')[0]}
        language={metadata.language}
        version={metadata.version}
        metadata={metadata}>
        <div className="docMainWrapper wrapper">
          <DocsSidebar metadata={metadata} />
          <Container className="mainContainer">
            <DocComponent
              metadata={metadata}
              content={content}
              config={this.props.config}
              source={metadata.source}
              title={
                i18n
                  ? translation[this.props.metadata.language][
                      'localized-strings'
                    ][this.props.metadata.localized_id] ||
                    this.props.metadata.title
                  : this.props.metadata.title
              }
              version={metadata.version}
              language={metadata.language}
            />
            <div className="docs-prevnext">
              {metadata.previous_id && (
                <a
                  className="docs-prev button"
                  href={metadata.previous_id + '.html'}>
                  ←{' '}
                  {i18n
                    ? translation[this.props.metadata.language][
                        'localized-strings'
                      ][metadata.previous_id] ||
                      translation[this.props.metadata.language][
                        'localized-strings'
                      ]['previous'] ||
                      'Previous'
                    : metadata.previous_title || 'Previous'}
                </a>
              )}
              {metadata.next_id && (
                <a
                  className="docs-next button"
                  href={metadata.next_id + '.html'}>
                  {i18n
                    ? translation[this.props.metadata.language][
                        'localized-strings'
                      ][metadata.next_id] ||
                      translation[this.props.metadata.language][
                        'localized-strings'
                      ]['next'] ||
                      'Next'
                    : metadata.next_title || 'Next'}{' '}
                  →
                </a>
              )}
            </div>
          </Container>
          {this.props.config.onPageNav == 'separate' && (
            <nav className="onPageNav">
              <OnPageNav rawContent={this.props.children} />
            </nav>
          )}
        </div>
      </Site>
    );
  }
}
module.exports = DocsLayout;
