import { cn } from '@/lib/utils';

type Status = 'success' | 'failed' | 'denied';
export type ReviewStatus =
    | 'reviewed'
    | 'escalated'
    | 'resolved'
    | 'false_positive'
    | null;

const STATUS_CONFIG: Record<Status, { label: string; cls: string }> = {
    success: {
        label: 'Success',
        cls: 'bg-green-500/10 text-green-700 dark:text-green-400 border border-green-500/20',
    },
    failed: {
        label: 'Failed',
        cls: 'bg-red-500/10 text-red-700 dark:text-red-400 border border-red-500/20',
    },
    denied: {
        label: 'Denied',
        cls: 'bg-orange-500/10 text-orange-700 dark:text-orange-400 border border-orange-500/20',
    },
};

const REVIEW_CONFIG: Record<string, { label: string; cls: string }> = {
    reviewed: {
        label: 'Reviewed',
        cls: 'bg-green-500/10 text-green-700 dark:text-green-400 border border-green-500/20',
    },
    escalated: {
        label: 'Escalated',
        cls: 'bg-red-500/10 text-red-700 dark:text-red-400 border border-red-500/20',
    },
    resolved: {
        label: 'Resolved',
        cls: 'bg-blue-500/10 text-blue-700 dark:text-blue-400 border border-blue-500/20',
    },
    false_positive: {
        label: 'False Positive',
        cls: 'bg-muted text-muted-foreground border border-border',
    },
};

export function StatusBadge({
    status,
    className,
}: {
    status: string;
    className?: string;
}) {
    const cfg = STATUS_CONFIG[status as Status] ?? {
        label: status,
        cls: 'bg-muted text-muted-foreground border border-border',
    };
    return (
        <span
            className={cn(
                'inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-semibold',
                cfg.cls,
                className,
            )}
        >
            {cfg.label}
        </span>
    );
}

export function ReviewBadge({
    status,
    className,
}: {
    status: ReviewStatus;
    className?: string;
}) {
    if (!status) {
        return (
            <span
                className={cn(
                    'bg-muted text-muted-foreground border-border inline-flex items-center rounded-full border px-2 py-0.5 text-[11px] font-semibold',
                    className,
                )}
            >
                Unreviewed
            </span>
        );
    }
    const cfg = REVIEW_CONFIG[status] ?? {
        label: status,
        cls: 'bg-muted text-muted-foreground border border-border',
    };
    return (
        <span
            className={cn(
                'inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-semibold',
                cfg.cls,
                className,
            )}
        >
            {cfg.label}
        </span>
    );
}
