import React, { CSSProperties } from 'react';
import { color } from 'folds';
import { Presence, useUserPresence } from '../../hooks/useUserPresence';

function presenceRingColor(presence: Presence | undefined, status?: string): string | null {
  if (!presence || presence === Presence.Offline) return null;
  if (presence === Presence.Unavailable) {
    return status === 'dnd' ? color.Critical.Main : color.Warning.Main;
  }
  return color.Success.Main;
}

type PresenceRingAvatarProps = {
  userId: string;
  children: React.ReactElement<{ style?: CSSProperties }>;
};

export function PresenceRingAvatar({ userId, children }: PresenceRingAvatarProps) {
  const presence = useUserPresence(userId);
  const ringColor = presenceRingColor(presence?.presence, presence?.status);

  if (!ringColor) return <>{children}</>;

  // Apply outline directly to the child so it follows the child's actual border-radius.
  // outline follows border-radius in Chrome 94+, Firefox 88+, Safari 16.4+.
  // This avoids the mismatch of a circular wrapper around a rounded-square avatar.
  return React.cloneElement(children, {
    style: {
      ...children.props.style,
      outline: `2px solid ${ringColor}`,
      outlineOffset: '2px',
    },
  });
}
