import type { ComponentProps } from 'react';
import { Badge } from '@/components/ui/badge';
import type { DocumentAccountantStatus } from '@/features/documents/types';
import { cn } from '@/lib/utils';

type BadgeVariant = ComponentProps<typeof Badge>['variant'];

export const accountantStatusMap: Record<
    DocumentAccountantStatus,
    { label: string; variant: BadgeVariant }
> = {
    waiting: { label: 'In asteptare', variant: 'secondarySoft' },
    in_review: { label: 'In review', variant: 'infoSoft' },
    needs_info: { label: 'Necesare info', variant: 'warningSoft' },
    error: { label: 'Eroare', variant: 'destructiveSoft' },
    validated: { label: 'Validat', variant: 'successSoft' },
    rejected: { label: 'Respins', variant: 'destructiveSoft' },
};

export type DocumentAccountantStatusBadgeSize = 'sm' | 'md';

export const accountantStatusBadgeSizeClasses: Record<DocumentAccountantStatusBadgeSize, string> = {
    sm: 'text-xs px-2 py-0.5',
    md: 'min-h-8 px-3 py-1 text-sm',
};

export function DocumentAccountantStatusBadge({
    status,
    className,
    size = 'sm',
}: {
    status: DocumentAccountantStatus;
    className?: string;
    size?: DocumentAccountantStatusBadgeSize;
}) {
    const mapped = accountantStatusMap[status];

    return (
        <Badge variant={mapped.variant} className={cn(accountantStatusBadgeSizeClasses[size], className)}>
            {mapped.label}
        </Badge>
    );
}
