import 'react-native-gesture-handler';
import { Navigation } from "react-native-navigation";
import { gestureHandlerRootHOC } from 'react-native-gesture-handler';
import { App } from './src/App';
import { Settings } from './src/Settings';
import { Splash } from './src/Splash';
import { Media } from './src/Media';
import { Camera } from 'react-native-vision-camera';

Navigation.setDefaultOptions({
  topBar: {
    visible: false,
  },
  window: {
    backgroundColor: 'black',
  },
  layout: {
    backgroundColor: 'black',
    componentBackgroundColor: 'black'
  },
  statusBar: {
    animated: true,
    drawBehind: true,
    translucent: true,
    visible: true,
    style: 'dark'
  },
  animations: {
    setRoot: {
      alpha: {
        duration: 500,
        from: 0,
        to: 1,
      }
    },
  }
});

Navigation.registerComponent('Splash', () => gestureHandlerRootHOC(Splash), () => Splash);
Navigation.registerComponent('Home', () => gestureHandlerRootHOC(App), () => App);
Navigation.registerComponent('Media', () => gestureHandlerRootHOC(Media), () => Media);
Navigation.registerComponent('Settings', () => gestureHandlerRootHOC(Settings), () => Settings);

Navigation.events().registerNavigationButtonPressedListener((event) => {
  if (event.buttonId === "back") {
    Navigation.pop(event.componentId);
  }
});

Navigation.events().registerAppLaunchedListener(async () => {
  const [cameraPermission, microphonePermission] = await Promise.all([
    Camera.getCameraPermissionStatus(),
    Camera.getMicrophonePermissionStatus(),
  ]);
  let rootName = "Splash";
  if (cameraPermission === "authorized" && microphonePermission === "authorized") {
    rootName = "Home";
  }

  Navigation.setRoot({
    root: {
      stack: {
        children: [
          {
            component: {
              name: rootName
            }
          }
        ]
      }
    }
  });
});
