import { GripVertical, Edit, Archive, RotateCcw } from 'lucide-react'
import { useSortable } from '@dnd-kit/sortable'
import { CSS } from '@dnd-kit/utilities'
import { cn } from '@/lib/utils'
import type { StepCategoryListItem } from '@/types'

interface CategoryRowProps {
  category: StepCategoryListItem
  stepCount: number
  onEdit: (category: StepCategoryListItem) => void
  onArchive: (id: string) => void
  onRestore: (id: string) => void
}

export function CategoryRow({
  category,
  stepCount,
  onEdit,
  onArchive,
  onRestore
}: CategoryRowProps) {
  const {
    attributes,
    listeners,
    setNodeRef,
    transform,
    transition,
    isDragging
  } = useSortable({ id: category.id })

  const style = {
    transform: CSS.Transform.toString(transform),
    transition
  }

  return (
    <div
      ref={setNodeRef}
      style={style}
      className={cn(
        'flex items-center gap-3 bg-card border border-border rounded-xl p-4',
        isDragging && 'opacity-50'
      )}
    >
      {/* Drag Handle */}
      <button
        type="button"
        {...attributes}
        {...listeners}
        className="cursor-grab touch-none text-muted-foreground hover:text-foreground active:cursor-grabbing"
        aria-label="Drag to reorder"
      >
        <GripVertical className="h-5 w-5" />
      </button>

      {/* Category Info */}
      <div className="flex-1">
        <div className="flex items-center gap-2">
          <h3 className="font-medium text-foreground">{category.name}</h3>
          {!category.is_active && (
            <span className="rounded-full bg-accent px-2 py-0.5 text-xs font-medium text-muted-foreground">
              Archived
            </span>
          )}
        </div>
        {category.description && (
          <p className="mt-1 text-sm text-muted-foreground">{category.description}</p>
        )}
        <p className="mt-1 text-xs text-muted-foreground">
          {stepCount} step{stepCount !== 1 ? 's' : ''}
        </p>
      </div>

      {/* Actions */}
      <div className="flex gap-2">
        <button
          type="button"
          onClick={() => onEdit(category)}
          className={cn(
            'rounded-md border border-border bg-card p-2 text-muted-foreground',
            'hover:bg-accent hover:text-foreground'
          )}
          title="Edit category"
          aria-label="Edit category"
        >
          <Edit className="h-4 w-4" />
        </button>

        {category.is_active ? (
          <button
            type="button"
            onClick={() => onArchive(category.id)}
            className={cn(
              'rounded-md border border-input bg-background p-2 text-muted-foreground',
              'hover:bg-accent hover:text-accent-foreground'
            )}
            title="Archive category"
            aria-label="Archive category"
          >
            <Archive className="h-4 w-4" />
          </button>
        ) : (
          <button
            type="button"
            onClick={() => onRestore(category.id)}
            className={cn(
              'rounded-md border border-input bg-background p-2 text-muted-foreground',
              'hover:bg-accent hover:text-accent-foreground'
            )}
            title="Restore category"
            aria-label="Restore category"
          >
            <RotateCcw className="h-4 w-4" />
          </button>
        )}
      </div>
    </div>
  )
}
