import { useState } from 'react'; // ===== OPENING SCRIPT (60 sec pitch for mayor) ===== // RU: // "Мы не предлагаем новую систему и не меняем процессы. // Мы даём вам простой инструмент, который показывает результат, который уже есть. // Сегодня у жителей ощущение, что ничего не работает — даже когда работа ведётся. // Проблема не в действиях, а в видимости. // Эта панель соединяет: обязательство → выполнение → подтверждение жителем. // Вы сами выбираете район, показатели и уровень прозрачности. // Через 14 дней у вас появляются реальные данные, которые можно показать. // Это не контроль — это инструмент, который усиливает вас как управленца." // HE: // "אנחנו לא מציעים מערכת חדשה ולא משנים תהליכים. // אנחנו נותנים כלי פשוט שמראה את התוצאה שכבר קיימת. // היום לתושבים יש תחושה ששום דבר לא עובד — גם כשכן עובדים. // הבעיה היא לא בעשייה, אלא בנראות. // הלוח מחבר בין התחייבות → ביצוע → אישור תושב. // אתה בוחר את האזור, המדדים ורמת השקיפות. // תוך 14 יום יש לך נתונים אמיתיים להציג. // זה לא פיקוח — זה כלי שמחזק אותך כמנהל." export default function UnifiedDashboard() { const [role, setRole] = useState<'resident' | 'mayor'>('resident'); const [lang, setLang] = useState<'ru' | 'he'>('ru'); const [realCase, setRealCase] = useState(false); const t = { ru: { title: 'Панель выполнения обещаний', resident: 'Для жителей', mayor: 'Для мэра', lastUpdate: 'Последнее обновление', updates: 'Последние обновления', internalTitle: 'Внутренняя панель управления', realCaseOn: 'Реальный кейс', realCaseOff: 'Идеальный кейс', target: 'Цель', }, he: { title: 'לוח מעקב התחייבויות', resident: 'לתושבים', mayor: 'לראש העיר', lastUpdate: 'עדכון אחרון', updates: 'עדכונים אחרונים', internalTitle: 'לוח ניהול פנימי', realCaseOn: 'מצב אמיתי', realCaseOff: 'מצב אידיאלי', target: 'יעד', }, }; const isHebrew = lang === 'he'; const kpisDemo = [ { title: isHebrew ? 'מענה ≤ 48ש׳' : 'Ответ ≤ 48ч', value: '82%', target: '90%', status: 'risk', }, { title: isHebrew ? 'נפתר ≤ 7 ימים' : 'Решено ≤ 7 дней', value: '68%', target: '70%', status: 'warn', }, { title: isHebrew ? 'תקלות ≤ 72ש׳' : 'Поломки ≤ 72ч', value: '91%', target: '95%', status: 'ok', }, ]; const kpisReal = [ { title: isHebrew ? 'מענה ≤ 48ש׳' : 'Ответ ≤ 48ч', value: '76%', target: '90%', status: 'risk', }, { title: isHebrew ? 'נפתר ≤ 7 ימים' : 'Решено ≤ 7 дней', value: '61%', target: '70%', status: 'warn', }, { title: isHebrew ? 'תקלות ≤ 72ש׳' : 'Поломки ≤ 72ч', value: '88%', target: '95%', status: 'warn', }, ]; const kpis = realCase ? kpisReal : kpisDemo; const updates = realCase ? [ { item: isHebrew ? 'מרכז העיר — עיכובים בטיפול בפניות' : 'Центр — задержки по обращениям', status: 'risk', }, { item: isHebrew ? 'עיר ימים — תאורה תוקנה' : 'Ир Ямим — освещение улучшено', status: 'ok', }, { item: isHebrew ? 'קריית השרון — מחסור במשאבים' : 'Кирьят а-Шарон — нехватка ресурсов', status: 'warn', }, ] : [ { item: isHebrew ? 'תאורה — תוקן' : 'Освещение — исправлено', status: 'ok', }, { item: isHebrew ? 'פניות — בטיפול' : 'Обращения — в процессе', status: 'warn', }, { item: isHebrew ? 'מענה — פיגור' : 'Ответы — отставание', status: 'risk', }, ]; const tasks = [ { title: isHebrew ? 'חיזוק צוות' : 'Усилить команду', status: isHebrew ? 'בתהליך' : 'В работе', }, { title: isHebrew ? 'בדיקת איכות' : 'Проверка качества', status: isHebrew ? 'חשוב' : 'Важно', }, ]; const color = (s: string) => { if (s === 'ok') return 'bg-emerald-100 text-emerald-800'; if (s === 'warn') return 'bg-amber-100 text-amber-800'; return 'bg-rose-100 text-rose-800'; }; const label = (s: string) => { if (lang === 'ru') { if (s === 'ok') return 'норма'; if (s === 'warn') return 'риск'; return 'критично'; } if (lang === 'he') { if (s === 'ok') return 'תקין'; if (s === 'warn') return 'סיכון'; return 'קריטי'; } return s; }; return (
{/* Switches */}
{/* Header */}

{t[lang].title}

{t[lang].lastUpdate}: 17.03.2026
{isHebrew ? 'עודכן מ‑CRM: לפני 2 דקות' : 'Обновлено из CRM: 2 минуты назад'}
{isHebrew ? 'אושר ע״י תושבים: 124' : 'Подтверждено жителями: 124'}
{/* KPI */}
{kpis.map((k) => (
{k.title}
{label(k.status)}
{k.value}
{t[lang].target}: {k.target}
))}
{/* Resident view */} {role === 'resident' && (

{t[lang].updates}

{updates.map((u) => (
{u.item}
{label(u.status)}
))}
)} {/* Mayor view */} {role === 'mayor' && (

{t[lang].internalTitle}

{tasks.map((tk) => (
{tk.title}
{tk.status}
))}
)} {/* FAQ / Objections (for demo & answers) */}

{isHebrew ? 'שאלות ותשובות נפוצות' : 'Частые вопросы'}

{isHebrew ? 'האם הנתונים אמיתיים?' : 'Данные реальные?'}
{isHebrew ? 'בפיילוט — נתונים מדגמיים. בשלב הבא חיבור למערכות העירוניות.' : 'В пилоте — демонстрационные. Далее — интеграция с городскими системами.'}
{isHebrew ? 'מה אם המדדים נמוכים?' : 'А если показатели плохие?'}
{isHebrew ? 'זה מאפשר לזהות מהר נקודות חלשות ולהראות שיפור בדינמיקה.' : 'Это позволяет быстро выявить слабые места и показать динамику улучшений.'}
{isHebrew ? 'האם זה מוסיף עומס?' : 'Это увеличит нагрузку?'}
{isHebrew ? 'לא. משתמשים בנתונים קיימים ומצמצמים עבודת דו"חות ידנית.' : 'Нет. Используются существующие данные и сокращается ручная отчётность.'}
{isHebrew ? 'מי שולט במה שמוצג?' : 'Кто контролирует, что показывается?'}
{isHebrew ? 'העירייה בוחרת אזור, מדדים ורמת שקיפות בתחילת הפיילוט.' : 'Муниципалитет выбирает район, KPI и уровень прозрачности на старте.'}
{/* Data Source Panel */}

{isHebrew ? 'מקורות הנתונים' : 'Источники данных'}

• {isHebrew ? 'פניות תושבים דרך אפליקציה עירונית' : 'Обращения жителей через городское приложение'}
• {isHebrew ? 'מערכת CRM עירונית (סטטוס טיפול)' : 'Городская CRM (статусы обработки)'}
• {isHebrew ? 'אישור תושב על פתרון הבעיה' : 'Подтверждение жителя о решении'}
• {isHebrew ? 'מדידת זמני תגובה אוטומטית' : 'Автоматическое измерение времени ответа'}
• {isHebrew ? 'אימות נתונים דרך דגימות ובקרה' : 'Проверка данных через выборочный аудит'}
{isHebrew ? 'הנתונים נאספים ממספר מקורות ואינם תלויים בדיווח ידני בלבד' : 'Данные собираются из нескольких источников и не зависят только от ручной отчетности'}
); }