import React, { TableHTMLAttributes, useEffect, useRef, useState } from 'react'
import { cn } from 'ui'

type TableProps = TableHTMLAttributes<HTMLTableElement>

const Table = ({ children, ...props }: TableProps) => {
  const containerRef = useRef<HTMLDivElement>(null)
  const [showShadow, setShowShadow] = useState(true)

  const handleScroll = () => {
    const container = containerRef.current

    if (container) {
      const { scrollWidth, scrollLeft, offsetWidth } = container
      const isAtEnd = scrollWidth - scrollLeft - 2 < offsetWidth
      setShowShadow(!isAtEnd)
    }
  }

  useEffect(() => {
    const container = containerRef.current
    if (container) {
      container.addEventListener('scroll', handleScroll)
      return () => container.removeEventListener('scroll', handleScroll)
    }
  }, [])

  return (
    <div className="relative">
      <span
        className={cn(
          'block md:hidden absolute inset-0 left-auto w-5 bg-linear-to-r from-transparent to-background transition-opacity opacity-100',
          !showShadow && 'opacity-0 duration-300'
        )}
      />
      <div ref={containerRef} className="w-full overflow-x-auto break-normal">
        <table {...props}>{children}</table>
      </div>
    </div>
  )
}

export default Table
