import { useState } from 'react'
import ClearIcon from 'shared/components/icons/clear.js'
import EditIcon from 'shared/components/icons/edit.js'
import { useTranslation } from 'next-i18next'

const EditCount = props => (
  <div className="form-control mb-2 w-full">
    <label className="label">
      <span className="label-text text-base-content">{props.min}</span>
      <span className="label-text font-bold text-base-content">{props.value}</span>
      <span className="label-text text-base-content">{props.max}</span>
    </label>
    <label className="input-group input-group-sm">
      <input
        type="number"
        className={`
          input input-sm input-bordered grow text-base-content
        `}
        value={props.value}
        onChange={props.handleChange}
      />
      <span className="text-base-content font-bold">#</span>
    </label>
  </div>
)


const DesignOptionCount = props => {
  const { t } = useTranslation(['app'])
  const { count, max, min } = props.pattern.config.options[props.option]
  const val = (typeof props.gist?.options?.[props.option] === 'undefined')
    ? count
    : props.gist.options[props.option]

  const [value, setValue] = useState(val)
  const [editCount, setEditCount] = useState(false)

  const handleChange = (evt) => {
    const newVal = evt.target.value
    setValue(newVal)
    props.updateGist(['options', props.option], newVal)
  }
  const reset = () => {
    setValue(count)
    props.unsetGist(['options', props.option])
  }

  return (
    <div className="py-4 mx-6 border-l-2 pl-2">
      <div className="flex flex-row justify-between">
        {editCount
          ? <EditCount
              value={value}
              handleChange={handleChange}
              min={min}
              max={max}
              setEditCount={setEditCount}
              t={t}
            />
          : (
            <>
              <span className="opacity-50">{min}</span>
              <span className={
                `font-bold ${val===count ? 'text-secondary' : 'text-accent'}`}
              >
                {val}
              </span>
              <span className="opacity-50">{max}</span>
            </>
          )
        }
      </div>
      <input
        type="range"
        max={max}
        min={min}
        step={1}
        value={value}
        onChange={handleChange}
        className={`
          range range-sm mt-1
          ${val === count ? 'range-secondary' : 'range-accent'}
        `}
      />
      <div className="flex flex-row justify-between">
        <span></span>
        <div>
          <button
            title={t('reset')}
            className="btn btn-ghost btn-xs text-accent"
            disabled={val === count}
            onClick={reset}
          >
            <ClearIcon />
          </button>
          <button
            title={t('editThing', { thing: '#' })}
            className={`
              btn btn-ghost btn-xs hover:text-secondary-focus
              ${editCount
                ? 'text-accent'
                : 'text-secondary'
              }
            `}
            onClick={() => setEditCount(!editCount)}
          >
            <EditIcon />
          </button>
        </div>
      </div>
    </div>
  )
}

export default DesignOptionCount