import React, { useState } from 'react'
import GenericExpansionPanel from 'components/CommonKit/ExpansionPanel/StyledSampleExpansionPanel'
import FAQJSon from 'db/FAQ.json'

const decoreText = (line: string) => {
  if (line === ' ') {
    return <span className="spaceline">{line}</span>
  } else if (line.includes('<b>')) {
    const indexStart = line.indexOf('<b>')
    const indexEnd = line.indexOf('</b>')
    return (
      <>
        {line.substring(0, indexStart)}
        <span className="text-bold">
          {line.substring(indexStart + 3, indexEnd)}
        </span>
        {line.substring(indexEnd + 4, line.length)}
      </>
    )
  } else if (line.includes('<u>')) {
    const indexStart = line.indexOf('<u>')
    const indexEnd = line.indexOf('</u>')
    return (
      <>
        {line.substring(0, indexStart)}
        <span className="text-underline">
          {line.substring(indexStart + 3, indexEnd)}
        </span>
        {line.substring(indexEnd + 4, line.length)}
      </>
    )
  } else if (line.includes('<a>')) {
    const indexStart = line.indexOf('<a>')
    const indexEnd = line.indexOf('</a>')
    return (
      <>
        {line.substring(0, indexStart)}
        <a
          href={line.substring(indexStart + 3, indexEnd)}
          target="_blank"
          rel="noopener noreferrer"
        >
          {line.substring(indexStart + 3, indexEnd)}
        </a>

        {line.substring(indexEnd + 4, line.length)}
      </>
    )
  } else {
    return line
  }
}

const formatDetails = (details: Array<string>) => {
  const formatedDetails: React.ReactNode[] = []
  details.forEach((detail, index) => {
    formatedDetails.push(
      <div key={index} className="faq-content-detail">
        {decoreText(detail)}
      </div>
    )
  })
  return formatedDetails
}

const FAQ = () => {
  const [expandedPanel, setExpandedPanel] = useState<string | false>(false)

  const handleChange = (panel: string) => (
    event: React.ChangeEvent<{}>,
    isExpanded: boolean
  ) => {
    setExpandedPanel(isExpanded ? panel : false)
  }

  return (
    <div className="faq-view-root">
      <div className="faq-view-content">
        {FAQJSon.map((question, index) => {
          return (
            <GenericExpansionPanel
              key={index}
              summary={question.summary}
              details={formatDetails(question.details)}
              expanded={expandedPanel === `panel${index}`}
              onChange={handleChange(`panel${index}`)}
            />
          )
        })}
      </div>
    </div>
  )
}

export default FAQ