// Metro module 10554 (f10555).
import * as Module19 from "react";
import { useState, useRef, useCallback, useMemo, useLayoutEffect } from "react";
import { ScrollView, StyleSheet, View } from "react-native";
import { createStyles } from "../../../../design/components/Styles/native/createStyles";
import { useSurfaceDirectRendererExperiment } from "../SurfaceDirectRendererExperiment";
import useVideoSpinnerTimer from "../../useVideoSpinnerTimer";
import useVideoReadyTimeout from "../../../errors/hooks/useVideoReadyTimeout";
import { getWindowDimensions } from "../../../screen/useWindowDimensions.native";
import { isAndroid } from "../../../../utils/PlatformUtils";
import { useStore, OrientationType } from "../../../device/native/DeviceOrientation";
import MessageLoadingSpinner from "../../../../components_native/common/MessageLoadingSpinner";
import ZoomLayout_android from "../../../zoom_layout/ZoomLayout.android";
import DCDVideoRenderer from "./DCDVideoRenderer";
import ReanimatedRexport from "../../../reanimated/ReanimatedRexport";
const useStyles = createStyles({
spinner: {
height: 32,
width: 32
},
center: {
alignItems: "center",
justifyContent: "center"
},
zoomLayoutAndroid: {
flex: 1
}
});
let c7091_11 = {
COVER: 0,
0: "COVER",
CONTAIN: 1,
1: "CONTAIN",
AUTO: 2,
2: "AUTO"
};
const r43 = Module19.memo(function(a0) {
const { streamId, resizeMode = c7091_11.CONTAIN } = a0;
let memo;
const CONTAIN = resizeMode;
const { gestureEnabled = false, renderTag, videoSpinnerContext, userId, streamKey, paused = false } = a0;
memo = void 0;
const styles = useStyles();
const surfaceDirectRendererExperiment = useSurfaceDirectRendererExperiment(userId, {
location: "VideoRenderer"
});
const [state, setState] = useState(0);
const [state2, setState2] = useState(0);
const [state3, setState3] = useState(0);
const [state4, setState4] = useState(0);
const [loading, setState5] = useState(true);
useVideoSpinnerTimer({
location: "VideoRenderer",
videoSpinnerContext,
userId,
streamId,
paused,
loading
});
const onReady = useVideoReadyTimeout({
streamId,
userId,
videoSpinnerContext,
paused,
loading,
streamKey
}).onReady;
const ref = useRef(null);
const ref2 = useRef(null);
const ref3 = useRef({
width: 0,
height: 0
});
const callback2 = useCallback(({ nativeEvent }) => {
const { width: width2, height: height2 } = nativeEvent;
const windowDimensions = getWindowDimensions();
const r27 = Math.min(Math.sqrt(windowDimensions.width * windowDimensions.height * 4 / (width2 * height2)), 1);
setState3(width2 * r27);
setState4(height2 * r27);
}, [setState3, setState4]);
const callback3 = useCallback(() => {
setState5(false);
onReady();
}, [onReady]);
const callback4 = useCallback((a0) => {
const layout = a0.nativeEvent.layout;
const { width: width2, height: height2 } = layout;
setState(width2);
setState2(height2);
ref3.current = {
width: width2,
height: height2
};
}, []);
const callback = useCallback((a0) => {
const layout = a0.nativeEvent.layout;
const { width, height } = layout;
if (!(isAndroid() || ref.current == null)) {
const current = ref.current;
if (!(width <= 0 || height <= 0)) {
current.scrollResponderZoomTo({
x: 0,
y: 0,
width,
height,
animated: false
});
current.scrollTo({
x: 0,
y: 0,
animated: false
});
}
requestAnimationFrame(() => {
if (ref.current != null) {
const current = ref.current;
if (!(width <= 0 || height <= 0)) {
current.scrollResponderZoomTo({
x: 0,
y: 0,
width,
height,
animated: false
});
current.scrollTo({
x: 0,
y: 0,
animated: false
});
}
}
});
}
}, []);
memo = useMemo(() => {
if (state !== 0 && state2 !== 0 && state3 !== 0 && state4 !== 0) {
let r10 = CONTAIN;
const r8 = state / state2;
const r7 = state3 / state4;
if (CONTAIN === c7091_11.AUTO) {
r10 = !(r8 > 1 && r7 > 1) && !(r8 < 1 && r7 < 1) ? c7091_11.CONTAIN : c7091_11.COVER;
}
return r10 === c7091_11.CONTAIN ? r8 > r7 ? state2 / state4 : state / state3 : r10 === c7091_11.COVER ? r7 > r8 ? state2 / state4 : state / state3 : 0;
}
return 0;
}, [state, state2, state3, state4, CONTAIN]);
const store = useStore((a0) => a0.orientation);
useLayoutEffect(() => {
if (isAndroid() && ref2.current != null) {
const current = ref2.current;
if (current != null) {
current.unzoom({
animated: false
});
}
}
}, [state, state2, state3, state4, memo]);
useLayoutEffect(() => {
if (!isAndroid() && ref.current != null && state3 > 0 && state4 > 0) {
const current = ref3.current;
const { width: width2, height: height2 } = current;
const current2 = ref.current;
if (!(width2 <= 0 || height2 <= 0)) {
current2.scrollResponderZoomTo({
x: 0,
y: 0,
width: width2,
height: height2,
animated: false
});
current2.scrollTo({
x: 0,
y: 0,
animated: false
});
}
}
}, [state3, state4]);
const memo2 = useMemo(() => ({
width: state3 * memo,
height: state4 * memo
}), [memo, state3, state4]);
const memo3 = useMemo(() => ({
width: state3 * memo,
height: state4 * memo
}), [memo, state3, state4]);
const memo4 = useMemo(() => {
const width2 = Math.min(state3 * memo, state);
const height2 = Math.min(state4 * memo, state2);
return {
position: "absolute",
left: (state - width2) / 2,
top: (state2 - height2) / 2,
width: width2,
height: height2,
alignItems: "center",
justifyContent: "center",
overflow: "hidden"
};
}, [state3, memo, state, state4, state2]);
const memo5 = useMemo(() => ({
width: state,
height: state2
}), [state, state2]);
const memo6 = useMemo(() => ({
position: "absolute",
top: state2 / 2 - Math.min(state4 * memo, state2) / 2,
right: state / 2 - Math.min(state3 * memo, state) / 2
}), [state3, memo, state, state4, state2]);
const r127 = loading ? : null;
const r5 = store === OrientationType.PORTRAIT;
return isAndroid() ?
{r127}
{loading ? null : gestureEnabled ? r5 ? renderTag == null ? void 0 : renderTag() : null : null}
: gestureEnabled ?
{r5 ? renderTag == null ? void 0 : renderTag() : null}
{r127 != null ? {r127} : null}
:
{r127}
;
});
export default r43;
export { c7091_11 as ResizeMode };