import React, { useState } from 'react'

import Tooltip from './tooltip.js'

import styles from './reactButton.module.css'
import reactions from '../data/reactions.json'

// TODO: fixdis
const breakEvery = 7

function ExistingReacts({ existingReacts, onClick, uid }) {
  return (
    <div className={styles.reactionContainer}>
      <div>React</div>
      {existingReacts &&
        Object.keys(existingReacts).map((key) => {
          const currReact = existingReacts[key]
          const react = reactions[key]
          if (!react) {
            return null
          }
          return (
            <div
              title={currReact.join(', ')}
              className={`${currReact.includes(uid) && styles.reacted}`}
              key={key}
              onClick={() => {
                onClick(key, currReact.includes(uid))
              }}
            >
              {react.emoji} {currReact.length}
            </div>
          )
        })}
    </div>
  )
}

function RenderEmojis({ onClick }) {
  const [search, setSearch] = useState('')

  let index = 0
  return (
    <>
      <input
        type="text"
        placeholder="Keresés..."
        onChange={(event) => {
          setSearch(event.target.value)
        }}
      />
      {Object.keys(reactions).map((key) => {
        const reaction = reactions[key]
        if (!key.includes(search.toLowerCase())) {
          return null
        }
        return (
          <>
            {index++ % breakEvery === 0 && (
              <div key={`${key}_break`} className={styles.break} />
            )}
            <div
              title={key}
              key={key}
              onClick={() => {
                onClick(key)
              }}
            >
              {reaction.emoji}
            </div>
          </>
        )
      })}
    </>
  )
}

export default function ReactButton({ onClick, existingReacts, uid }) {
  const [opened, setOpened] = useState(false)

  return (
    <div
      className={styles.reactContainer}
      onMouseEnter={() => {
        setOpened(true)
      }}
      onMouseLeave={() => {
        setOpened(false)
      }}
    >
      <Tooltip
        opened={opened}
        text={() => (
          <ExistingReacts
            uid={uid}
            onClick={onClick}
            existingReacts={existingReacts}
          />
        )}
      >
        <div className={styles.reactionContainer}>
          <RenderEmojis
            onClick={(e) => {
              // setOpened(false)
              onClick(e)
            }}
          />
        </div>
      </Tooltip>
    </div>
  )
}