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) => (
))}
Нажмите на значок для получения подробной информации
{/* Информационное сообщение */}
Важная информация
Календарь обязательств помогает следить за важными сроками. Мы автоматически напомним вам о приближающихся датах.
);
}