text: 'use strict'
  
  import {
    ENVIRONMENT_TYPE_POPUP,
    PLATFORM_BRAVE,
    PLATFORM_FIREFOX,
  } from '../../app/scripts/lib/enums'
  import { getEnvironmentType, getPlatform } from '../../app/scripts/lib/util'
  
  class WebcamUtils {
    static async checkStatus () {
      const isPopup = getEnvironmentType() === ENVIRONMENT_TYPE_POPUP
      const isFirefoxOrBrave =
        getPlatform() === (PLATFORM_FIREFOX || PLATFORM_BRAVE)
  
      const devices = await window.navigator.mediaDevices.enumerateDevices()
      const webcams = devices.filter((device) => device.kind === 'videoinput')
      const hasWebcam = webcams.length > 0
      // A non-empty-string label implies that the webcam has been granted permission, as
      // otherwise the label is kept blank to prevent fingerprinting
      const hasWebcamPermissions = webcams.some(
        (webcam) => webcam.label && webcam.label.length > 0
      )
  
      if (hasWebcam) {
        let environmentReady = true
        if ((isFirefoxOrBrave && isPopup) || (isPopup && !hasWebcamPermissions)) {
          environmentReady = false
        }
        return {
          permissions: hasWebcamPermissions,
          environmentReady,
        }
      } else {
        const error = new Error('No webcam found')
        error.type = 'NO_WEBCAM_FOUND'
        throw error
      }
    }
  }
  
  export default WebcamUtils
  