import { Badge } from '@/components/ui/badge';
import { cn } from '@/lib/utils';
import type { Status } from '@/types/task';

interface TaskStatusBadgeProps {
    status: Status | string;
    className?: string;
}

export function TaskStatusBadge({ status, className }: TaskStatusBadgeProps) {
    const getStatusBadge = (status: string) => {
        switch (status.toLowerCase()) {
            case 'completed':
            case 'done':
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-green-200 bg-green-50/50 text-green-600 dark:border-green-900/50 dark:bg-green-900/20 dark:text-green-400',
                            className,
                        )}
                    >
                        Completed
                    </Badge>
                );
            case 'active':
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-green-200 bg-green-50/50 text-green-600 dark:border-green-900/50 dark:bg-green-900/20 dark:text-green-400',
                            className,
                        )}
                    >
                        Active
                    </Badge>
                );
            case 'paused':
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-neutral-200 bg-neutral-50/50 text-neutral-600 dark:border-neutral-800 dark:bg-neutral-900/50 dark:text-neutral-400',
                            className,
                        )}
                    >
                        Paused
                    </Badge>
                );
            case 'in_progress':
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-blue-200 bg-blue-50/50 text-blue-600 dark:border-blue-900/50 dark:bg-blue-900/20 dark:text-blue-400',
                            className,
                        )}
                    >
                        In Progress
                    </Badge>
                );
            case 'review':
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-purple-200 bg-purple-50/50 text-purple-600 dark:border-purple-900/50 dark:bg-purple-900/20 dark:text-purple-400',
                            className,
                        )}
                    >
                        Review
                    </Badge>
                );
            case 'on_hold':
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-amber-200 bg-amber-50/50 text-amber-700 dark:border-amber-900/50 dark:bg-amber-900/20 dark:text-amber-400',
                            className,
                        )}
                    >
                        On Hold
                    </Badge>
                );
            case 'cancelled':
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-red-200 bg-red-50/50 text-red-600 dark:border-red-900/50 dark:bg-red-900/20 dark:text-red-400',
                            className,
                        )}
                    >
                        Cancelled
                    </Badge>
                );
            default:
                return (
                    <Badge
                        variant="outline"
                        className={cn(
                            'border-neutral-200 bg-neutral-50/50 text-neutral-600 dark:border-neutral-800 dark:bg-neutral-900/50 dark:text-neutral-400',
                            className,
                        )}
                    >
                        {status
                            .replace(/_/g, ' ')
                            .replace(/\b\w/g, (l) => l.toUpperCase())}
                    </Badge>
                );
        }
    };

    return getStatusBadge(status);
}
