// Metro module 16044 (f16045).
import { useState, useMemo, useCallback, useRef, useEffect, useContext } from "react";
import { Easing, TouchableOpacity, View, StyleSheet } from "react-native";
import ChannelStore from "../../../stores/ChannelStore";
import MessageStore from "../../../stores/MessageStore";
import RelationshipStore from "../../../stores/RelationshipStore";
import UserStore from "../../../stores/UserStore";
import { AnalyticEvents, MessageFlags, Routes } from "../../../Constants";
import { SquarePIPReferenceDimensions } from "../../voice_panel/native/pip/VoicePanelPIPConstants";
import { createStyles } from "../../../design/components/Styles/native/createStyles";
import Module712 from "../../../_bundle/Module712";
import { useToken } from "../../../design/tokens/native/useToken";
import { useStateFromStores } from "../../../_bundle/Module589";
import { computeChannelName } from "../../channel/useChannelName";
import getDisplayFilename from "../../messages/getDisplayFilename";
import { Text } from "../../../design/components/Text/native/Text";
import { Marquee } from "../../../_bundle/AnimatedChild";
import Module4611 from "../../../_bundle/Module4611";
import MessageActionCreators from "../../../actions/MessageActionCreators";
import safeTransitionTo_native from "../../links/safeTransitionTo.native";
import ReanimatedRexport, { useAnimatedStyle } from "../../reanimated/ReanimatedRexport";
import * as _timing from "../../../design/animation/reanimated/timing/timing";
import { intl, t } from "../../../intl/index.native";
import { BackgroundBlurFill } from "../../../design/components/experimental/native";
import { ArrowLargeLeftIcon } from "../../../design/components/Icon/native/redesign/generated/ArrowLargeLeftIcon";
import { XLargeIcon } from "../../../design/components/Icon/native/redesign/generated/XLargeIcon";
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
import MediaPlayerManager, { useMediaPlayerManagerStore } from "../../media/native/MediaPlayerManager";
import { useShallow } from "../../../_bundle/Module3804";
import MediaPlaybackPanelStateContext from "./MediaPlaybackPanelStateContext";
import { PauseIcon } from "../../../design/components/Icon/native/redesign/generated/PauseIcon";
import { PlayIcon } from "../../../design/components/Icon/native/redesign/generated/PlayIcon";
import { AnimatedCircularProgress } from "../../../_bundle/Module14084";
let useStyles, __initData, PiPControls;
const MediaInfo = function MediaInfo(props) {
let state, setState, state2, setState2;
const { message, activeMediaPlayerSource: activeMediaPlayerSource3, isVoiceMessage: isVoiceMessage2, isControlVisible: isControlVisible2 } = props;
state = void 0;
setState = void 0;
state2 = void 0;
setState2 = void 0;
const styles = useStyles();
const token = useToken(Module712.colors.BACKGROUND_SURFACE_HIGH);
const stateFromStores3 = useStateFromStores([ChannelStore, UserStore, RelationshipStore], () => {
const channel = ChannelStore.getChannel(message?.channel_id);
return channel != null ? computeChannelName(channel, UserStore, RelationshipStore, true, true) : null;
}, [message]);
[state, setState] = useState(0);
[state2, setState2] = useState(0);
const memo = useMemo(() => state2 >= state, [state2, state]);
const r53 = message == null ? void 0 : message.getContentMessage();
if (message != null && r53 != null && activeMediaPlayerSource3 != null) {
const r74 = setState2(event.nativeEvent.layout.width)}>
{isVoiceMessage2 ? message.author.username : r53.attachments.length > 0 ? activeMediaPlayerSource3.attachmentIndex != null ? getDisplayFilename(r53.attachments[activeMediaPlayerSource3.attachmentIndex]) : "" : ""}
;
return setState(event.nativeEvent.layout.width)}>
{memo ?
: r74}
{stateFromStores3 != null && {stateFromStores3}}
;
}
return null;
};
PiPControls = function PiPControls(props) {
const { message: message2, handleClosePip, visible, isVoiceMessage: isVoiceMessage2 } = props;
const styles = useStyles();
const callback3 = useCallback(() => {
if (message2 != null && message2.channel_id != null && message2.id != null) {
MessageActionCreators.trackJump(message2.channel_id, message2.id, "Media PIP", {});
const channel = ChannelStore.getChannel(message2.channel_id);
safeTransitionTo_native(Routes.CHANNEL(channel == null ? void 0 : channel.getGuildId(), message2.channel_id, message2.id), {
navigationReplace: true,
openChannel: true
});
}
}, [message2]);
const c = function c() {
return {
opacity: _timing.withTiming(visible ? 1 : 0, {
duration: 200
})
};
};
c.__closure = {
withTiming: _timing.withTiming,
visible
};
c.__workletHash = 3641278982291;
c.__initData = __initData;
return
;
};
useStyles = createStyles({
container: {
justifyContent: "center",
alignItems: "center",
height: SquarePIPReferenceDimensions.height,
width: SquarePIPReferenceDimensions.width
},
pipControls: {
...StyleSheet.absoluteFillObject,
zIndex: 5
},
pipButton: {
position: "absolute",
top: 8,
padding: 8,
borderRadius: Module712.radii.round,
borderWidth: 1,
borderColor: Module712.colors.CONTROL_SECONDARY_BORDER_DEFAULT,
tintColor: Module712.colors.CONTROL_SECONDARY_TEXT_DEFAULT,
backgroundColor: Module712.colors.CONTROL_SECONDARY_BACKGROUND_DEFAULT,
...Module712.shadows.SHADOW_LOW_HOVER
},
dismissButton: {
right: 8
},
backButton: {
left: 8
},
infoContainer: {
justifyContent: "center",
alignItems: "center",
marginBottom: 8,
height: 34
},
infoContainerGradient: {
...StyleSheet.absoluteFillObject
},
infoContent: {
justifyContent: "center",
alignItems: "center",
alignSelf: "stretch",
marginHorizontal: 4
},
actionContainer: {
justifyContent: "center",
alignItems: "center",
width: 48,
height: 48,
zIndex: 100
},
playPauseButton: {
justifyContent: "center",
alignItems: "center",
width: 32,
height: 32,
zIndex: 100,
borderRadius: Module712.radii.round,
backgroundColor: Module712.colors.BACKGROUND_BRAND
},
progressBar: {
...StyleSheet.absoluteFillObject,
justifyContent: "center",
alignItems: "center"
}
});
__initData = {
code: "function MediaPlaybackPipTsx1(){const{withTiming,visible}=this.__closure;return{opacity:withTiming(visible?1:0,{duration:200})};}"
};
export default function MediaPlaybackPip() {
let isPlaying, activeMediaPlayerSource, closePip, stateFromStores, isVoiceMessage, state3, dismissPanel, callback, isControlVisible;
const styles = useStyles();
const ref2 = useRef(null);
const mediaPlayerManagerStore = useMediaPlayerManagerStore(useShallow((a0) => ({
isPlaying: a0.isPlaying,
progress: a0.progress,
activeMediaPlayerSource: a0.activeMediaPlayerSource,
mediaSourceMessage: a0.mediaSourceMessage,
closePip: a0.closePip
})));
isPlaying = mediaPlayerManagerStore.isPlaying;
const progress3 = mediaPlayerManagerStore.progress;
activeMediaPlayerSource = mediaPlayerManagerStore.activeMediaPlayerSource;
let mediaSourceMessage = mediaPlayerManagerStore.mediaSourceMessage;
closePip = mediaPlayerManagerStore.closePip;
const stateFromStores3 = useStateFromStores([MessageStore], () => {
const channelId = activeMediaPlayerSource?.channelId;
const messageId = activeMediaPlayerSource?.messageId;
return channelId == null ? null : messageId == null ? null : MessageStore.getMessage(channelId, messageId);
}, [activeMediaPlayerSource]);
if (stateFromStores3 != null) {
mediaSourceMessage = stateFromStores3;
}
stateFromStores = mediaSourceMessage;
const r5 = stateFromStores == null;
let r44 = void 0;
if (!r5) {
const contentMessage = stateFromStores.getContentMessage();
r44 = contentMessage == null ? void 0 : contentMessage.hasFlag(MessageFlags.IS_VOICE_MESSAGE);
}
let progress2, callback2;
isVoiceMessage = !!r44;
const activeMediaPlayerSource2 = activeMediaPlayerSource;
const progress = progress3;
const stateFromStores2 = stateFromStores;
const ref = useRef(null);
useEffect(() => {
if (ref.current == null && activeMediaPlayerSource2 != null && progress != null && stateFromStores2 != null) {
ref.current = {
initialProgress: progress,
activeMediaPlayerSource: activeMediaPlayerSource2,
message: stateFromStores2
};
}
if (ref.current != null && progress != null) {
ref.current.finalProgress = progress;
}
}, [progress, activeMediaPlayerSource, stateFromStores]);
useEffect(() => {
let c30944_0 = new Date();
return () => {
let current = ref.current;
if (current == null) {
current = {};
}
const { activeMediaPlayerSource: activeMediaPlayerSource3, message: message3, initialProgress, finalProgress } = current;
const r19 = activeMediaPlayerSource3?.attachmentIndex != null;
let r9 = null;
if (r19) {
const r20 = message3 == null;
let r21 = void 0;
if (!r20) {
const contentMessage = message3.getContentMessage();
r21 = contentMessage == null ? void 0 : contentMessage.attachments[activeMediaPlayerSource3.attachmentIndex];
}
r9 = r21;
}
const messageId = activeMediaPlayerSource3?.messageId;
const sender_user_id = message3 == null ? void 0 : message3.author.id;
const content_type = r9?.content_type;
const r33 = message3 == null;
let is_voice_message = void 0;
if (!r33) {
const contentMessage2 = message3.getContentMessage();
is_voice_message = contentMessage2 == null ? void 0 : contentMessage2.hasFlag(MessageFlags.IS_VOICE_MESSAGE);
}
const duration = finalProgress?.duration;
const total_duration_secs = duration != null ? duration / 1000 : void 0;
const time = initialProgress?.time;
const pip_playback_start_time_secs = time != null ? time / 1000 : void 0;
const time2 = finalProgress?.time;
AnalyticsUtils.track(AnalyticEvents.MEDIA_PIP_ENDED, {
message_id: messageId,
sender_user_id,
type: content_type,
is_voice_message,
total_duration_secs,
pip_playback_start_time_secs,
pip_playback_end_time_secs: time2 != null ? time2 / 1000 : void 0,
pip_opened_timestamp: c30944_0.toISOString(),
pip_closed_timestamp: new Date().toISOString()
});
};
}, []);
let [state, setState3] = useState(false);
state3 = state;
useEffect(() => {
let c28209_0;
if (state3) {
c28209_0 = setTimeout(() => {
if (isPlaying) {
setState3(false);
}
}, 3000);
}
return () => clearTimeout(c28209_0);
}, [state3, setState3, isPlaying]);
dismissPanel = useContext(MediaPlaybackPanelStateContext).dismissPanel;
callback = useCallback(() => {
dismissPanel();
closePip();
MediaPlayerManager.pauseCurrentPlayer();
}, [dismissPanel, closePip]);
progress2 = progress;
callback2 = callback;
useEffect(() => {
const isCompleted = progress2?.isCompleted;
let c30945_0;
if (isCompleted) {
c30945_0 = setTimeout(() => {
callback2();
}, 2000);
}
return () => {
clearTimeout(c30945_0);
};
}, [progress?.isCompleted, callback]);
if (!state3) {
state = progress?.isCompleted === true;
}
isControlVisible = state;
const callback3 = useCallback(() => {
if (isPlaying) {
MediaPlayerManager.pauseCurrentPlayer();
setState3(true);
} else {
MediaPlayerManager.playCurrentPlayer();
}
}, [isPlaying]);
const memo = useMemo(() => isPlaying ? : , [isPlaying]);
const memo2 = useMemo(() => , [stateFromStores, activeMediaPlayerSource, isVoiceMessage, isControlVisible]);
const memo3 = useMemo(() => , [stateFromStores, callback, isControlVisible, isVoiceMessage]);
let accessibilityLabel = isVoiceMessage ? intl.string(t.AlHqHT) : intl.string(t.RscU7I);
const r17 = isVoiceMessage ? intl.string(t["3XohGn"]) : intl.string(t.ZcgDJX);
const prefill = progress == null ? 0 : progress.time / progress.duration * 100;
const r26 = progress == null ? 0 : progress.duration - progress.time;
const props = {
style: styles.container,
activeOpacity: 1,
onPress: () => {
if (!(isPlaying ? !isPlaying : isControlVisible)) {
setState3(!state3);
}
},
accessible: false,
children: null
};
const children = [memo3, memo2, ,];
const r170 = [, ,];
if (isPlaying) {
accessibilityLabel = r17;
}
r170[1] = {memo};
children[2] = {r170};
props.children = children;
return ;
};