import * as React from 'react';

import { Badge } from '@/Components/ui/badge';
import { cn } from '@/lib/utils';

export type CircuitState = 'closed' | 'half-open' | 'half_open' | 'open';

export interface ServiceStatusBadgeProps {
  state: CircuitState;
  className?: string;
}

type NormalizedState = 'closed' | 'half-open' | 'open';

const stateConfig: Record<
  NormalizedState,
  {
    variant: 'success' | 'destructive' | 'default';
    label: string;
    className?: string;
  }
> = {
  closed: {
    variant: 'success',
    label: 'Healthy',
    className:
      'bg-green-500 text-white hover:bg-green-600 dark:bg-green-600 dark:hover:bg-green-700',
  },
  'half-open': {
    variant: 'default',
    label: 'Testing',
    className:
      'bg-yellow-500 text-yellow-950 hover:bg-yellow-600 dark:bg-yellow-600 dark:text-yellow-950 dark:hover:bg-yellow-700',
  },
  open: {
    variant: 'destructive',
    label: 'Failing',
    className: 'bg-red-500 text-white hover:bg-red-600 dark:bg-red-600 dark:hover:bg-red-700',
  },
};

function normalizeState(state: CircuitState): NormalizedState {
  return state === 'half_open' ? 'half-open' : (state as NormalizedState);
}

const ServiceStatusBadge = React.forwardRef<HTMLDivElement, ServiceStatusBadgeProps>(
  ({ state, className }, ref) => {
    const config = stateConfig[normalizeState(state)];

    return (
      <Badge ref={ref} variant={config.variant} className={cn(config.className, className)}>
        {config.label}
      </Badge>
    );
  },
);

ServiceStatusBadge.displayName = 'ServiceStatusBadge';

export { ServiceStatusBadge };
