import { ArrowLeft, CheckCircle, Clock, Info, Calendar as CalendarIcon, MapPin, Briefcase, FileText, Globe, Home } from 'lucide-react'; import { useNavigate } from 'react-router'; import * as Tooltip from '@radix-ui/react-tooltip'; interface ClientData { icon: React.ReactNode; label: string; value: string; } interface Obligation { id: string; title: string; status: 'completed' | 'deadline' | 'pending' | 'info'; statusText?: string; tooltip?: string; } const clientData: ClientData[] = [ { icon: , label: 'Гражданство', value: 'Узбекистан' }, { icon: , label: 'Цель визита', value: 'Работа' }, { icon: , label: 'Основание пребывания', value: 'Миграционная карта' }, { icon: , label: 'Дата въезда в РФ', value: '15.03.2026' }, { icon: , label: 'Регион РФ', value: 'Москва' }, ]; const currentObligations: Obligation[] = [ { id: '1', title: 'Уведомление о прибытии', status: 'completed', statusText: 'Выполнено' }, { id: '2', title: 'Заявление на патент', status: 'deadline', statusText: 'Осталось 5 дней' }, { id: '3', title: 'Уведомление о работе', status: 'pending', statusText: 'После получения патента' }, { id: '4', title: 'Оплатить НДФЛ', status: 'deadline', statusText: 'Осталось 3 дня' }, ]; const situationalObligations: Obligation[] = [ { id: '1', title: 'Смена места жительства', status: 'info', tooltip: 'При смене места жительства необходимо уведомить МВД в течение пяти рабочих дней' }, ]; function ObligationItem({ obligation }: { obligation: Obligation }) { const getStatusStyles = () => { switch (obligation.status) { case 'completed': return { icon: , bgColor: 'bg-green-500/10', textColor: 'text-green-600', badgeColor: 'bg-green-500/10 text-green-600' }; case 'deadline': return { icon: , bgColor: 'bg-red-500/10', textColor: 'text-red-600', badgeColor: 'bg-red-500/10 text-red-600' }; case 'pending': return { icon: , bgColor: 'bg-yellow-500/10', textColor: 'text-yellow-600', badgeColor: 'bg-yellow-500/10 text-yellow-600' }; case 'info': return { icon: , bgColor: 'bg-blue-500/10', textColor: 'text-blue-600', badgeColor: 'bg-blue-500/10 text-blue-600' }; default: return { icon: , bgColor: 'bg-muted', textColor: 'text-muted-foreground', badgeColor: 'bg-muted text-muted-foreground' }; } }; const styles = getStatusStyles(); return (
{styles.icon}

{obligation.title}

{obligation.statusText && (

{obligation.statusText}

)}
{obligation.tooltip ? ( {obligation.tooltip} ) : obligation.statusText ? ( {obligation.statusText} ) : null}
); } export function Calendar() { const navigate = useNavigate(); return (
{/* Заголовок */}

Календарь обязательств

Важные даты и действия

{/* Блок 1: Данные о клиенте */}

Данные о пребывании

{clientData.map((item, index) => (
{item.icon}

{item.label}:

{item.value}

))}
{/* Блок 2: Текущие обязательства */}

Текущие обязательства

{currentObligations.map((obligation) => ( ))}
{/* Блок 3: Ситуационные обязательства */}

Ситуационные обязательства

{situationalObligations.map((obligation) => ( ))}

Нажмите на значок для получения подробной информации

{/* Информационное сообщение */}

Важная информация

Календарь обязательств помогает следить за важными сроками. Мы автоматически напомним вам о приближающихся датах.

); }