import React, { useEffect, useMemo, useState } from 'react';
import { TabBar } from './components.jsx';
import { HomeCardsScreen, HomeListScreen, HomeFeedScreen, HomeTimelineXScreen, HomeSplashScreen } from './screens/screens-home.jsx';
import {
BookingSpecsScreen, BookingDoctorScreen, BookingTimeScreen,
BookingConfirmScreen, BookingSuccessScreen,
DoctorsTabScreen, DoctorDetailScreen,
} from './screens/screens-booking.jsx';
import {
ApptsTabScreen, ApptDetailScreen,
ResultsScreen, ResultAudioScreen, ResultEndoscopyScreen,
RecoveryScreen, AudioTestScreen,
ProfileTabScreen, QRScreen,
TelemedScreen, MedcardScreen, NotificationsScreen,
} from './screens/screens-misc.jsx';
import { ChatsListScreen, ChatConversationScreen } from './screens/screens-chats.jsx';
import { ArticlesScreen, ArticleDetailScreen } from './screens/screens-articles.jsx';
import { HomeV2Screen, SearchScreen, ContactsScreen, PricesScreen } from './screens/screens-v2.jsx';
import { DevColorsScreen, DevExamplesScreen } from './screens/screens-dev.jsx';
import { DocsScreen } from './screens/screens-docs.jsx';
import { ProfilePlateScreen, ApptsPlateScreen, ApptDetailPlateScreen, MedcardPlateScreen } from './screens/screens-plate.jsx';
function renderScreen(screenId, nav, ctx) {
const parts = screenId.split(':');
const id = parts[0];
const plate = ctx.design === 'plate';
// В plate-режиме главная всегда «Светлая плитка», независимо от homeVariant
const homeVariant = plate ? 'splash' : ctx.homeVariant;
const HOME = { cards: HomeCardsScreen, list: HomeListScreen, feed: HomeFeedScreen, timelineX: HomeTimelineXScreen, splash: HomeSplashScreen }[homeVariant] || HomeCardsScreen;
// Plate-подмены (fallback на Клод если plate-версии нет)
if (plate) {
switch (id) {
case 'profile': return ;
case 'appts': return ;
case 'appt': return ;
case 'medcard': return ;
}
}
switch (id) {
case 'home': return ;
case 'home-v2': return ;
case 'doctors': return ;
case 'doctor': return ;
case 'booking-specs': return ;
case 'booking-doctor': return ;
case 'booking-time': return ;
case 'booking-confirm': return ;
case 'booking-success': return ;
case 'appts': return ;
case 'appt': return ;
case 'results': return ;
case 'result-audio': return ;
case 'result': return ;
case 'recovery': return ;
case 'audiotest': return ;
case 'chat': return parts[1]
?
: ;
case 'profile': return ;
case 'qr': return ;
case 'telemed': return ;
case 'medcard': return ;
case 'notifications': return ;
case 'articles': return ;
case 'article': return ;
case 'search': return ;
case 'contacts': return ;
case 'prices': return ;
case 'dev-colors': return ;
case 'dev-examples': return ;
case 'docs': return ;
default: return
Экран не найден: {screenId}
;
}
}
const TAB_IDS = ['home', 'appts', 'doctors', 'chat', 'profile'];
export function PhoneApp({ initialScreen, ctx, onCurrentChange }) {
const [stack, setStack] = useState([initialScreen]);
useEffect(() => { setStack([initialScreen]); }, [initialScreen]);
const current = stack[stack.length - 1];
useEffect(() => {
if (onCurrentChange) onCurrentChange(current);
}, [current, onCurrentChange]);
const nav = useMemo(() => ({
push: (id) => setStack(s => [...s, id]),
pop: () => setStack(s => s.length > 1 ? s.slice(0, -1) : s),
set: (id) => setStack([id]),
reset:() => setStack(['home']),
}), []);
const rootId = current.split(':')[0];
const hasSubId = current.includes(':');
const tabId = hasSubId ? null : (rootId === 'home-v2' ? 'home' : (TAB_IDS.includes(rootId) ? rootId : null));
const showTabBar = tabId !== null;
const modalScreens = ['qr', 'telemed', 'booking-success', 'audiotest'];
const isModal = modalScreens.includes(current.split(':')[0]);
return (
{renderScreen(current, nav, ctx)}
{showTabBar && !isModal && (
nav.set(t)} />
)}
);
}