import clsx from 'clsx'
import { useState } from 'react'

import { CurrencyDollarIcon } from '@heroicons/react/outline'
import { Contract } from 'common/contract'
import { COMMENT_BOUNTY_AMOUNT } from 'common/economy'
import { formatMoney } from 'common/util/format'
import { Tooltip } from 'web/components/tooltip'
import { CommentBountyDialog } from './comment-bounty-dialog'

export function BountiedContractBadge() {
  return (
    <span className="inline-flex items-center gap-1 rounded-full bg-indigo-300 px-3  py-0.5 text-sm font-medium text-white">
      <CurrencyDollarIcon className={'h4 w-4'} /> Bounty
    </span>
  )
}

export function BountiedContractSmallBadge(props: {
  contract: Contract
  showAmount?: boolean
}) {
  const { contract, showAmount } = props
  const { openCommentBounties } = contract

  const [open, setOpen] = useState(false)

  if (!openCommentBounties && !showAmount) return <></>

  const modal = (
    <CommentBountyDialog open={open} setOpen={setOpen} contract={contract} />
  )

  const bountiesClosed =
    contract.isResolved || (contract.closeTime ?? Infinity) < Date.now()

  if (!openCommentBounties) {
    if (bountiesClosed) return <></>

    return (
      <>
        {modal}
        <SmallBadge text="Add bounty" onClick={() => setOpen(true)} />
      </>
    )
  }

  const tooltip = `${contract.creatorName} may award ${formatMoney(
    COMMENT_BOUNTY_AMOUNT
  )} for good comments. ${formatMoney(
    openCommentBounties
  )} currently available.`

  return (
    <Tooltip text={tooltip} placement="bottom">
      {modal}
      <SmallBadge
        text={`${formatMoney(openCommentBounties)} bounty`}
        onClick={bountiesClosed ? undefined : () => setOpen(true)}
      />
    </Tooltip>
  )
}

function SmallBadge(props: { text: string; onClick?: () => void }) {
  const { text, onClick } = props

  return (
    <button
      onClick={onClick}
      className={clsx(
        'inline-flex items-center gap-1 whitespace-nowrap rounded-full bg-indigo-300 px-2 py-0.5 text-xs font-medium text-white',
        !onClick && 'cursor-default'
      )}
    >
      <CurrencyDollarIcon className={'h4 w-4'} />
      {text}
    </button>
  )
}