const React = require('react');

const RTCView = React.forwardRef((props, ref) => {
  const { streamURL, mirror, objectFit, style, ...rest } = props;
  const src = streamURL || (props.stream && props.stream.toURL ? props.stream.toURL() : '');

  if (src) {
    return React.createElement('video', {
      ...rest,
      ref,
      src,
      autoPlay: true,
      playsInline: true,
      muted: props.muted || false,
      style: {
        ...style,
        transform: mirror ? 'scaleX(-1)' : undefined,
        objectFit: objectFit || 'cover',
        width: '100%',
        height: '100%',
      },
    });
  }
  return React.createElement('div', { ...rest, ref, style });
});
RTCView.displayName = 'RTCView';

const ScreenCapturePickerView = React.forwardRef((props, ref) => {
  return React.createElement('div', { ...props, ref, 'data-native-component': 'ScreenCapturePickerView' });
});
ScreenCapturePickerView.displayName = 'ScreenCapturePickerView';

const mediaDevices = typeof navigator !== 'undefined' && navigator.mediaDevices
  ? navigator.mediaDevices
  : {
      getUserMedia: () => Promise.reject(new Error('mediaDevices not available')),
      getDisplayMedia: () => Promise.reject(new Error('mediaDevices not available')),
      enumerateDevices: () => Promise.resolve([]),
    };

const RTCPeerConnection = typeof window !== 'undefined' ? window.RTCPeerConnection : function () {};
const RTCSessionDescription = typeof window !== 'undefined' ? window.RTCSessionDescription : function () {};
const RTCIceCandidate = typeof window !== 'undefined' ? window.RTCIceCandidate : function () {};
const MediaStream = typeof window !== 'undefined' ? window.MediaStream : function () {};
const MediaStreamTrack = typeof window !== 'undefined' ? window.MediaStreamTrack : function () {};

function registerGlobals() {}

const permissions = {
  request: () => Promise.resolve(true),
  check: () => Promise.resolve(true),
};

const RTCAudioSession = {
  setCategory: () => {},
  setActive: () => {},
  setMode: () => {},
};

const RTCRtpReceiver = typeof window !== 'undefined' ? window.RTCRtpReceiver : function () {};
const RTCRtpSender = typeof window !== 'undefined' ? window.RTCRtpSender : function () {};
const RTCRtpTransceiver = typeof window !== 'undefined' ? window.RTCRtpTransceiver : function () {};
const RTCErrorEvent = typeof window !== 'undefined' ? window.RTCErrorEvent : function () {};
const MediaStreamTrackEvent = typeof window !== 'undefined' ? window.MediaStreamTrackEvent : function () {};

const RTCPIPView = React.forwardRef((props, ref) => {
  return React.createElement('div', { ...props, ref, 'data-native-component': 'RTCPIPView' });
});
RTCPIPView.displayName = 'RTCPIPView';

function startIOSPIP() {}
function stopIOSPIP() {}

module.exports = {
  RTCView,
  ScreenCapturePickerView,
  RTCPeerConnection,
  RTCSessionDescription,
  RTCIceCandidate,
  MediaStream,
  MediaStreamTrack,
  MediaStreamTrackEvent,
  mediaDevices,
  permissions,
  registerGlobals,
  RTCAudioSession,
  RTCRtpReceiver,
  RTCRtpSender,
  RTCRtpTransceiver,
  RTCErrorEvent,
  RTCPIPView,
  startIOSPIP,
  stopIOSPIP,
};
