import * as React from 'react';
import { LocalParticipant } from 'livekit-client';
import type { Participant, Room } from 'livekit-client';
import { encryptionStatusObservable } from '@livekit/components-core';
import { useEnsureParticipant, useEnsureRoom } from '../context';
import { useObservableState } from './internal';

/**
 * @alpha
 */
export interface UseIsEncryptedOptions {
  room?: Room;
}

/**
 * @alpha
 */
export function useIsEncrypted(participant?: Participant, options: UseIsEncryptedOptions = {}) {
  const p = useEnsureParticipant(participant);

  const room = useEnsureRoom(options.room);

  const observer = React.useMemo(() => encryptionStatusObservable(room, p), [room, p]);
  const isEncrypted = useObservableState(
    observer,
    p instanceof LocalParticipant ? p.isE2EEEnabled : !!p?.isEncrypted,
  );
  return isEncrypted;
}
