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.webm'),
ru: require('@/assets/manual/manual_video_ru.webm'),
en: require('@/assets/manual/manual_video_en.webm'),
};
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]
);
const selectedLanguage = languages.find((l) => l.code === selectedLang);
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: 22, 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)',
},
});