import { useState } from 'react';
import classNames from 'classnames';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { faFacebookSquare, faTwitterSquare, faRedditSquare, faGithubSquare } from '@fortawesome/free-brands-svg-icons'
import {
  PageHeader,
  RoadmapMeta,
  ShareRoadmap,
  Sidebar,
  Summary,
  SummaryContainer,
  MobileNavHeader,
  SidebarButton,
  MobileSidebar,
  MobileSidebarWrap,
  DesktopSidebarWrap,
  PageTitle,
  PageDetail
} from './style';
import { faBars } from '@fortawesome/free-solid-svg-icons'
import { getFacebookShareUrl } from 'lib/url';
import { ShareIcon } from 'components/share-icon';
import { getRedditShareUrl, getTwitterShareUrl } from 'lib/url';
import siteConfig from "content/site";
import MdRenderer from 'components/md-renderer';

const DetailedRoadmap = ({ roadmap }) => {
  const [menuActive, setMenuState] = useState(false);
  const {
    sidebar = {},
    page: currentPage = {},
    author = {}
  } = roadmap;

  const roadmapPages = Object.keys(sidebar || {}).map((groupTitle, groupCounter) => {
    if (groupTitle.startsWith('_')) {
      return;
    }

    // @todo remove it after completing the frontend roadmap
    const isInProgress = groupCounter !== 0;

    return (
      <div className={`links-group ${isInProgress ? 'in-progress' : ''}`} key={groupTitle}>
        <h3>
          { groupTitle }
          { isInProgress && <span className='badge badge-warning progress-badge'>In Progress</span> }
        </h3>
        <ul>
          { sidebar[groupTitle].map(page => {
            const isActivePage = page.url === currentPage.url;
            // e.g. /frontend should mark `/frontend/landscape` as active
            const isSummaryPage = page.url === `${currentPage.url}/summary`;

            return (
              <li className={classNames({ active: isActivePage || isSummaryPage })} key={page.url}>
                <a href={ page.url }>
                  <span className="bullet"></span>
                  { page.title }
                </a>
              </li>
            );
          }) }
        </ul>
      </div>
    );
  });

  const filePath = currentPage.path.replace(/^\//, '');
  const RoadmapContent = require(`../../content/${filePath}`).default;

  return (
    <SummaryContainer>
      <PageHeader className="border-top border-bottom text-center text-md-left">
        <div className="container d-flex align-items-center flex-column flex-md-row">
          <RoadmapMeta>
            <h3>{ roadmap.title }</h3>
            <p>
              Roadmap contributed by <a href={ author.url } target="_blank">{ author.name }</a>
              { roadmap.contributorsCount > 1 && ` and <a href="${roadmap.contributorsUrl}">${roadmap.contributorsCount} others</a>`}
            </p>
          </RoadmapMeta>
          <ShareRoadmap className="mt-2 mt-md-0">
            <ShareIcon href={ siteConfig.url.repo } target="_blank">
              <FontAwesomeIcon icon={ faGithubSquare } />
            </ShareIcon>
            <ShareIcon href={ getFacebookShareUrl({ text: roadmap.title, url: roadmap.url }) } target="_blank">
              <FontAwesomeIcon icon={ faFacebookSquare } />
            </ShareIcon>
            <ShareIcon href={ getTwitterShareUrl({ text: roadmap.title, url: roadmap.url }) } target="_blank">
              <FontAwesomeIcon icon={ faTwitterSquare } />
            </ShareIcon>
            <ShareIcon href={ getRedditShareUrl({ text: roadmap.title, url: roadmap.url }) } target="_blank">
              <FontAwesomeIcon icon={ faRedditSquare } />
            </ShareIcon>
          </ShareRoadmap>
        </div>
      </PageHeader>

      <MobileNavHeader className="border-bottom d-block d-md-none">
        <div className="container">
          <SidebarButton onClick={() => setMenuState((prevMenuActive) => !prevMenuActive)}>
            <FontAwesomeIcon icon={ faBars } />
            { currentPage.title }
          </SidebarButton>
        </div>
        <MobileSidebarWrap className={classNames({ visible: menuActive })}>
          <div className="container">
            <MobileSidebar>
              { roadmapPages }
            </MobileSidebar>
          </div>
        </MobileSidebarWrap>
      </MobileNavHeader>

      <Summary className="container">
        <DesktopSidebarWrap className="d-none d-md-block">
          <Sidebar>
            { roadmapPages }
          </Sidebar>
        </DesktopSidebarWrap>
        <PageDetail>
          <PageTitle>{ currentPage.title }</PageTitle>
          <MdRenderer>
            <RoadmapContent />
          </MdRenderer>
        </PageDetail>
      </Summary>
    </SummaryContainer>
  )
};

export default DetailedRoadmap;