import { useState, type FormEvent } from 'react'; import { Modal, Button, Input } from '@krona/ui'; import { useCommunicationsStore } from '../services/communicationsService'; import { useToast } from '../../../shared/ui'; import { Paperclip } from 'lucide-react'; export function ComposeEmailModal({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) { const { sendEmail } = useCommunicationsStore(); const { showToast } = useToast(); const [toEmail, setToEmail] = useState(''); const [subject, setSubject] = useState(''); const [body, setBody] = useState(''); const handleSubmit = (e: FormEvent) => { e.preventDefault(); if (!toEmail.trim() || !subject.trim()) return; sendEmail({ mailboxId: 'mb-work', folder: 'sent', from: { name: 'Krona Office', email: 'office@krona.systems' }, to: { name: toEmail.split('@')[0], email: toEmail.trim() }, subject: subject.trim(), preview: body.slice(0, 80) + '...', body: body.trim(), isUnread: false, hasAttachment: false, }); showToast({ title: 'Письмо отправлено', message: `Отправлено на адрес ${toEmail}`, type: 'success', }); onClose(); }; return ( Кому (Email) setToEmail(e.target.value)} placeholder="client@company.ru" required /> Тема setSubject(e.target.value)} placeholder="Тема письма..." required /> Текст письма setBody(e.target.value)} placeholder="Здравствуйте!..." className="w-full p-3 rounded-xl bg-[var(--krona-bg-workspace)] border border-[var(--krona-border)] text-sm text-[var(--krona-text-primary)] placeholder-[var(--krona-text-muted)] focus:outline-none focus:border-[var(--krona-primary)] resize-none" required /> Прикрепить файл Отмена Отправить ); } export function CreateChannelModal({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) { const { createChannel } = useCommunicationsStore(); const { showToast } = useToast(); const [name, setName] = useState(''); const [topic, setTopic] = useState(''); const [isPrivate, setIsPrivate] = useState(false); const handleSubmit = (e: FormEvent) => { e.preventDefault(); if (!name.trim()) return; createChannel({ name: name.trim(), topic: topic.trim() || 'Новый канал организации', isPrivate, }); showToast({ title: 'Канал создан', message: `Канал #${name} успешно добавлен`, type: 'success', }); onClose(); }; return ( Название канала setName(e.target.value)} placeholder="маркетинг-и-реклама" required /> Тема / Описание канала setTopic(e.target.value)} placeholder="Обсуждение совместных проектов..." /> setIsPrivate(e.target.checked)} className="w-4 h-4 rounded text-[var(--krona-primary)] focus:ring-[var(--krona-primary)]" /> Закрытый канал (Private) Доступ только по приглашению руководителей Отмена Создать канал ); } export function AddContactModal({ isOpen, onClose }: { isOpen: boolean; onClose: () => void }) { const { addContact } = useCommunicationsStore(); const { showToast } = useToast(); const [name, setName] = useState(''); const [company, setCompany] = useState(''); const [role, setRole] = useState('Клиент'); const [channelValue, setChannelValue] = useState(''); const [isVip, setIsVip] = useState(false); const handleSubmit = (e: FormEvent) => { e.preventDefault(); if (!name.trim()) return; addContact({ name: name.trim(), company: company.trim() || 'Частное лицо', role: role.trim() || 'Клиент', isVip, channels: [ { type: 'telegram', value: channelValue.trim() || '@client_tg', label: 'Telegram', isConnected: true, }, ], }); showToast({ title: 'Контакт добавлен', message: `${name} добавлен в справочник и список диалогов`, type: 'success', }); onClose(); }; return ( ФИО / Имя контакта setName(e.target.value)} placeholder="Константин Васильев" required /> Компания setCompany(e.target.value)} placeholder="ООО «Северный Альянс»" /> Должность setRole(e.target.value)} placeholder="Коммерческий директор" /> Telegram / Телефон setChannelValue(e.target.value)} placeholder="@vasiliev_kostya или +7 999 123-45-67" /> setIsVip(e.target.checked)} className="w-4 h-4 rounded text-[var(--krona-gold)]" /> VIP статус клиента Отмена Сохранить контакт ); } export function ConnectChannelModal({ isOpen, onClose, mode = 'messenger' }: { isOpen: boolean; onClose: () => void; mode?: 'messenger' | 'email' }) { const { showToast } = useToast(); const [platform, setPlatform] = useState('telegram'); const [identifier, setIdentifier] = useState(''); const [useVpn, setUseVpn] = useState(false); const handleSubmit = (e: FormEvent) => { e.preventDefault(); showToast({ title: mode === 'email' ? 'Почта подключена' : 'Мессенджер подключен', message: `${mode === 'email' ? 'Ящик' : platform.toUpperCase()} (${identifier}) успешно подключен${useVpn && mode === 'messenger' ? ' через VPN' : ''}`, type: 'success', }); onClose(); }; return ( {mode === 'email' ? 'Почтовый сервис' : 'Мессенджер'} setPlatform(e.target.value)} className="w-full h-10 px-3 rounded-xl bg-[var(--krona-bg-workspace)] border border-[var(--krona-border)] text-sm text-[var(--krona-text-primary)] focus:outline-none focus:border-[var(--krona-primary)]" > {mode === 'email' ? <> IMAP / SMTP Яндекс Почта Google Workspace / Gmail Mail.ru > : <> Telegram WhatsApp VK Мессенджер MAX >} {mode === 'email' ? 'Адрес электронной почты' : 'Телефон или логин аккаунта'} setIdentifier(e.target.value)} placeholder={mode === 'email' ? 'name@company.ru' : '+7 900 000-00-00 или @username'} required /> {mode === 'messenger' && setUseVpn(e.target.checked)} className="w-4 h-4 accent-[var(--krona-primary)]" /> Подключать через VPNИспользовать VPN-шлюз организации для этого аккаунта } Отмена Подключить ); }