import { useTheme } from '@/components/ThemeContext'; import { router } from 'expo-router'; import { VideoView, useVideoPlayer } from 'expo-video'; import { ArrowLeft, Play, X } from 'lucide-react-native'; import React, { useEffect, useMemo, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { FlatList, Image, Pressable, ScrollView, StyleSheet, Text, TouchableOpacity, View, } from 'react-native'; import ImageViewer from 'react-native-image-zoom-viewer'; import Modal from 'react-native-modal'; type ManualStep = { image: any; description?: string; }; type Language = { code: 'uz' | 'ru' | 'en'; label: string; flag: string; }; const languages: Language[] = [ { code: 'uz', label: "O'zbekcha", flag: '🇺🇿' }, { code: 'ru', label: 'Русский', flag: '🇷🇺' }, { code: 'en', label: 'English', flag: '🇬🇧' }, ]; export function ManualTab() { const { isDark } = useTheme(); const { t, i18n } = useTranslation(); const [isPlaying, setIsPlaying] = useState(false); /** 🔹 Modal states */ const [imageVisible, setImageVisible] = useState(false); const [imageIndex, setImageIndex] = useState(0); const [langPickerVisible, setLangPickerVisible] = useState(false); /** 🔹 Video tili (SELECT uchun) */ const userLang = i18n.language.startsWith('ru') ? 'ru' : i18n.language.startsWith('en') ? 'en' : 'uz'; const [selectedLang, setSelectedLang] = useState<'uz' | 'ru' | 'en'>(userLang); /** 🔹 RASM tili (faqat app tili bo‘yicha) */ const imageLang: 'uz' | 'ru' | 'en' = userLang; /** 🔹 Theme */ const theme = { background: isDark ? '#0f172a' : '#f8fafc', cardBg: isDark ? '#1e293b' : '#ffffff', text: isDark ? '#ffffff' : '#0f172a', primary: '#3b82f6', textMuted: isDark ? '#94a3b8' : '#64748b', border: isDark ? '#334155' : '#e2e8f0', }; /** 🔹 Video manbalari (SELECT ga bog‘liq) */ const videos = { uz: require('@/assets/manual/manual_video_uz.mp4'), ru: require('@/assets/manual/manual_video_ru.mp4'), en: require('@/assets/manual/manual_video_en.mp4'), }; const player = useVideoPlayer(videos[selectedLang], (player) => { player.loop = false; }); /** 🔹 Rasmlar (FAqat imageLang) */ const steps: ManualStep[] = [ { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step1.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step1.jpg') : require('@/assets/manual/image_en/step1.jpg'), description: t("Ilovani oching va ro'yxatdan o'ting"), }, { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step2.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step2.jpg') : require('@/assets/manual/image_en/step2.jpg'), description: t("Profilni to'ldiring"), }, { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step3.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step3.jpg') : require('@/assets/manual/image_en/step3.jpg'), description: t("To'lov usulini qo'shing"), }, { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step4.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step4.jpg') : require('@/assets/manual/image_en/step4.jpg'), description: t('Xaridni tanlang'), }, { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step5.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step5.jpg') : require('@/assets/manual/image_en/step5.jpg'), description: t("To'lovni amalga oshiring"), }, { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step6.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step6.jpg') : require('@/assets/manual/image_en/step6.jpg'), description: t("Natijani ko'ring"), }, { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step7.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step7.jpg') : require('@/assets/manual/image_en/step7.jpg'), description: t("Natijani ko'ring"), }, { image: imageLang === 'uz' ? require('@/assets/manual/image_uz/step8.jpg') : imageLang === 'ru' ? require('@/assets/manual/image_ru/step8.jpg') : require('@/assets/manual/image_en/step8.jpg'), description: t("Natijani ko'ring"), }, ]; /** 🔹 Image viewer */ const images = useMemo( () => steps.map((step) => ({ url: '', props: { source: step.image } })), [imageLang] ); useEffect(() => { // listener qo'shish const subscription = player.addListener('playingChange', (state) => { setIsPlaying(state.isPlaying); }); return () => { subscription.remove(); }; }, [player]); const renderStep = ({ item, index }: { item: ManualStep; index: number }) => ( { setImageIndex(index); setImageVisible(true); }} > ); return ( {/* HEADER */} router.back()}> {t("Foydalanish qo'llanmasi")} {/* VIDEO */} {t("Foydalanish qo'llanmasi")} {t("Quyidagi qisqa video yoki rasmlarni ko'rib chiqing")} {/* setLangPickerVisible(true)} > {selectedLanguage?.flag} */} {!isPlaying && ( { player.play(); setIsPlaying(true); }} > )} {/* RASMLAR */} {/* {t('Foydalanish rasm qo‘llanma')} */} {/* IMAGE MODAL */} setImageVisible(false)} renderHeader={() => ( setImageVisible(false)}> )} /> {/* LANGUAGE MODAL */} {/* setLangPickerVisible(false)}> {t('Video tilini tanlang')} {languages.map((lang) => { const isSelected = selectedLang === lang.code; return ( { setSelectedLang(lang.code); setLangPickerVisible(false); }} style={[ styles.langOption, { borderColor: isSelected ? theme.primary : theme.border, backgroundColor: isSelected ? theme.primary + '15' : 'transparent', }, ]} > {lang.flag} {lang.label} {isSelected && ( )} ); })} */} ); } const styles = StyleSheet.create({ container: { flex: 1 }, hero: { padding: 20 }, topHeader: { flexDirection: 'row', alignItems: 'center', gap: 12 }, headerTitle: { fontSize: 18, fontWeight: '700', marginHorizontal: 16 }, subtitle: { fontSize: 16, marginTop: 5, fontWeight: '500', marginHorizontal: 16 }, section: { marginBottom: 28 }, sectionTitle: { fontSize: 20, fontWeight: '700', marginLeft: 16 }, langSelector: { margin: 5, width: 80, gap: 5, paddingVertical: 5, borderRadius: 14, borderWidth: 1.5, alignContent: 'center', alignItems: 'center', flexDirection: 'row', justifyContent: 'center', }, videoCard: { marginHorizontal: 16, marginTop: 10, borderRadius: 20, overflow: 'hidden', position: 'relative', }, video: { width: '100%', aspectRatio: 9 / 13 }, stepCard: { borderRadius: 16, overflow: 'hidden' }, stepImage: { width: 300, height: 300 }, closeButton: { position: 'absolute', top: 50, right: 20, padding: 8, zIndex: 50, backgroundColor: 'rgba(0,0,0,0.5)', borderRadius: 20, }, langModalContent: { padding: 20, borderRadius: 20, }, langOption: { flexDirection: 'row', alignItems: 'center', justifyContent: 'space-between', paddingVertical: 14, paddingHorizontal: 16, borderRadius: 14, borderWidth: 1.5, marginBottom: 10, }, langOptionLeft: { flexDirection: 'row', alignItems: 'center', gap: 12, }, checkmark: { width: 24, height: 24, borderRadius: 12, alignItems: 'center', justifyContent: 'center', }, checkmarkText: { color: '#fff', fontSize: 14, fontWeight: 'bold', }, playOverlay: { position: 'absolute', top: 0, left: 0, right: 0, bottom: 0, alignItems: 'center', justifyContent: 'center', backgroundColor: 'rgba(0,0,0,0.25)', }, });