import React from 'react'
import clsx from 'clsx'
import Link from 'next/link'

import { trackCallback } from 'web/lib/service/analytics'

export type Item = {
  name: string
  trackingEventName?: string
  href?: string
  key?: string
  icon?: React.ComponentType<{ className?: string }>
}

export function SidebarItem(props: {
  item: Item
  currentPage: string
  onClick?: (key: string) => void
}) {
  const { item, currentPage, onClick } = props
  const isCurrentPage =
    item.href != null ? item.href === currentPage : item.key === currentPage

  const sidebarItem = (
    <a
      onClick={trackCallback('sidebar: ' + item.name)}
      className={clsx(
        isCurrentPage
          ? 'bg-gray-200 text-gray-900'
          : 'text-gray-600 hover:bg-gray-100',
        'group flex items-center rounded-md px-3 py-2 text-sm font-medium'
      )}
      aria-current={item.href == currentPage ? 'page' : undefined}
    >
      {item.icon && (
        <item.icon
          className={clsx(
            isCurrentPage
              ? 'text-gray-500'
              : 'text-gray-400 group-hover:text-gray-500',
            '-ml-1 mr-3 h-6 w-6 flex-shrink-0'
          )}
          aria-hidden="true"
        />
      )}
      <span className="truncate">{item.name}</span>
    </a>
  )

  if (item.href) {
    return (
      <Link href={item.href} key={item.name}>
        {sidebarItem}
      </Link>
    )
  } else {
    return onClick ? (
      <button onClick={() => onClick(item.key ?? '#')}>{sidebarItem}</button>
    ) : (
      <> </>
    )
  }
}
