import { FC, useState, useEffect } from 'react' import { CloseCircle } from 'iconsax-react' import { useTranslation } from 'react-i18next' import { useSharedStore } from '@/shared/store/sharedStore' import Input from '@/components/Input' import EmailInput from './EmailInput' import EmailEditor from './EmailEditor' import EmailAttachments from './EmailAttachments' import EmailFormActions from './EmailFormActions' import { useNewMessage } from './hooks/useNewMessage' import Intelligense from '@/assets/images/intelligense.svg' import { useGenerateEmail } from '@/pages/received/hooks/useEmailData' import { clx } from '@/helpers/utils' import { getIconColor } from '@/utils/colorUtils' const NewMessage: FC = () => { const { t } = useTranslation('global') const { openNewMessage, setOpenNewMessage } = useSharedStore() const [isClosing, setIsClosing] = useState(false) const [shouldRender, setShouldRender] = useState(false) const [isOpening, setIsOpening] = useState(false) const [isIntelligenseOpen, setIsIntelligenseOpen] = useState(false) const [prompt, setPrompt] = useState('') const [showCcBcc, setShowCcBcc] = useState(false) const { // Form state toEmails, ccEmails, bccEmails, subject, content, priority, attachments, emailSuggestions, // Loading states isSending, isSavingDraft, // Form handlers addEmail, removeEmail, addCcEmail, removeCcEmail, addBccEmail, removeBccEmail, setSubject, setContent, setPriority, setAttachments, // Search functions searchEmailSuggestions, // Actions handleSend, handleSaveDraft, resetForm } = useNewMessage() const { mutate: generateEmail, isPending: isGeneratingEmail } = useGenerateEmail() useEffect(() => { if (openNewMessage) { setShouldRender(true) setIsClosing(false) setIsOpening(true) setTimeout(() => { setIsOpening(false) }, 50) } else if (shouldRender) { setIsClosing(true) const timer = setTimeout(() => { setShouldRender(false) setIsClosing(false) }, 300) return () => clearTimeout(timer) } }, [openNewMessage, shouldRender]) const handleClose = () => { setIsClosing(true) setTimeout(() => { setOpenNewMessage(false) resetForm() setShowCcBcc(false) }, 300) } const handleSendWithClose = async () => { const success = await handleSend() if (success) { handleClose() } } const handleSaveDraftWithClose = async () => { const success = await handleSaveDraft() if (success) { handleClose() } } const handlePrompt = () => { if (isIntelligenseOpen && prompt.length > 0) { generateEmail({ prompt }, { onSuccess: (data) => { setContent(data?.data?.assistance?.suggestion?.content) if (subject === '') { setSubject(data?.data?.assistance?.suggestion?.subject) } } }) } else { setIsIntelligenseOpen(!isIntelligenseOpen) } } return ( <> {shouldRender && ( <>