import { clsx, type ClassValue } from "clsx"
import { twMerge } from "tailwind-merge"

/**
 * Combines class names using clsx and tailwind-merge for conditional styling
 * Handles conditional classes, arrays, and objects with proper Tailwind CSS merging
 * 
 * @param inputs - Class values to combine (strings, objects, arrays, etc.)
 * @returns Combined and merged class name string
 * 
 * @example
 * // Basic usage
 * cn('px-2 py-1', 'bg-red-500')
 * 
 * @example
 * // Conditional classes
 * cn('base-class', isActive && 'active-class', hasError && 'error-class')
 * 
 * @example
 * // With objects
 * cn('base-class', { 'text-red-500': isError, 'text-green-500': isSuccess })
 * 
 * @example
 * // Tailwind merge conflicts resolved automatically
 * cn('px-2 py-1', 'px-4') // Results in 'px-4 py-1'
 */
export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs))
}
