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

import _ from 'lodash';

const React = require('react');
const Remarkable = require('./Remarkable');

/**
 * The MarkdownBlock component is used to parse markdown and render to HTML.
 */
class MarkdownBlock extends React.Component {
  render() {
    const groupId = _.uniqueId();

    const tabs = this.props.children.map(({title, content}) => ({
      id: _.uniqueId(),
      groupId,
      label: title,
      lang: title,
      panelContent: <Remarkable source={content} />,
    }));

    return (
      <div className="tabs">
        <div className="nav-tabs">
          {tabs.map((t, i) => {
            const tabId = `tab-group-${groupId}-tab-${t.id}`;
            const contentId = `tab-group-${groupId}-content-${t.id}`;
            return (
              <div
                id={tabId}
                key={tabId}
                className={`nav-link${i === 0 ? ' active' : ''}`}
                data-group={`group_${t.groupId}`}
                data-tab={contentId}>
                {t.label}
              </div>
            );
          })}
        </div>
        <div className="tab-content">
          {tabs.map((t, i) => {
            const id = `tab-group-${groupId}-content-${t.id}`;
            return (
              <div
                id={id}
                key={id}
                className={`tab-pane${i === 0 ? ' active' : ''}`}
                data-group={`group_${t.groupId}`}
                tabIndex="-1">
                {t.panelContent}
              </div>
            );
          })}
        </div>
      </div>
    );
  }
}

module.exports = MarkdownBlock;