'use client'

import { useState, useEffect } from 'react'
import {
  DropdownMenu,
  DropdownMenuContent,
  DropdownMenuTrigger,
  DropdownMenuSeparator,
  DropdownMenuLabel,
} from '@/components/ui/dropdown-menu'
import { Button } from '@/components/ui/button'
import { Badge } from '@/components/ui/badge'
import { Filter, Check } from 'lucide-react'
import { cn } from '@/lib/utils'
import { useNotebooks } from '@/context/notebooks-context'
import { LabelBadge } from './label-badge'
import { useLanguage } from '@/lib/i18n'

interface LabelFilterProps {
  selectedLabels: string[]
  onFilterChange: (labels: string[]) => void
  className?: string
}

export function LabelFilter({ selectedLabels, onFilterChange, className }: LabelFilterProps) {
  const { labels, isLoading: loading } = useNotebooks()
  const { t, language } = useLanguage()
  const [allLabelNames, setAllLabelNames] = useState<string[]>([])

  useEffect(() => {
    // Extract label names from labels array
    setAllLabelNames(labels.map((l: any) => l.name).sort())
  }, [labels])

  const handleToggleLabel = (label: string) => {
    if (selectedLabels.includes(label)) {
      onFilterChange(selectedLabels.filter((l: string) => l !== label))
    } else {
      onFilterChange([...selectedLabels, label])
    }
  }

  const handleClearAll = () => {
    onFilterChange([])
  }

  if (loading || allLabelNames.length === 0) return null

  return (
    <div dir={language === 'fa' || language === 'ar' ? 'rtl' : 'ltr'} className={cn("flex items-center gap-2", className ? "" : "")}>
      <DropdownMenu dir={language === 'fa' || language === 'ar' ? 'rtl' : 'ltr'}>
        <DropdownMenuTrigger asChild>
          <Button
            dir={language === 'fa' || language === 'ar' ? 'rtl' : 'ltr'}
            variant="outline"
            size="sm"
            className={cn(
              "h-10 gap-2 rounded-full border border-gray-200 bg-white hover:bg-gray-50 text-gray-700 shadow-sm font-medium",
              className
            )}
          >
            <Filter className="h-4 w-4" />
            {t('labels.filter') || 'Filter'}
            {selectedLabels.length > 0 && (
              <Badge variant="secondary" className="ml-1 h-5 min-w-5 px-1.5 rounded-full bg-gray-100">
                {selectedLabels.length}
              </Badge>
            )}
          </Button>
        </DropdownMenuTrigger>
        <DropdownMenuContent align="end" className="w-80">
          <DropdownMenuLabel className="flex items-center justify-between">
            <span>{t('labels.title')}</span>
            {selectedLabels.length > 0 && (
              <Button
                variant="ghost"
                size="sm"
                onClick={handleClearAll}
                className="h-6 text-xs"
              >
                {t('general.clear')}
              </Button>
            )}
          </DropdownMenuLabel>
          <DropdownMenuSeparator />

          {/* Label Filters */}
          <div className="max-h-64 overflow-y-auto px-1 pb-1">
            {!loading && allLabelNames.map((labelName: string) => {
              const isSelected = selectedLabels.includes(labelName)

              return (
                <div
                  key={labelName}
                  onClick={(e) => {
                    e.preventDefault()
                    handleToggleLabel(labelName)
                  }}
                  className={cn(
                    "flex items-center gap-2 p-2 rounded-sm cursor-pointer text-sm hover:bg-accent hover:text-accent-foreground"
                  )}
                >
                  <div className={cn(
                    "flex h-4 w-4 items-center justify-center rounded border border-primary",
                    isSelected ? "bg-primary text-primary-foreground" : "opacity-50 [&_svg]:invisible"
                  )}>
                    <Check className="h-3 w-3" />
                  </div>
                  <LabelBadge
                    label={labelName}
                  />
                </div>
              )
            })}
          </div>
        </DropdownMenuContent>
      </DropdownMenu>

      {/* Active filters display */}
      {!loading && selectedLabels.length > 0 && (
        <div className="flex flex-wrap gap-1">
          {selectedLabels.map((labelName: string) => (
            <LabelBadge
              key={labelName}
              label={labelName}
              variant="filter"
              onClick={() => handleToggleLabel(labelName)}
            />
          ))}
        </div>
      )}
    </div>
  )
}
