"use client"; import { useState, useRef, useCallback } from "react"; import type { MailMessage } from "@/app/dashboard/mail/page"; import { formatBytes } from "@/lib/format"; interface AttachmentFile { file: File; name: string; size: number; } export default function ComposeModal({ replyTo, onClose, onSent }: { replyTo: MailMessage | null; onClose: () => void; onSent: () => void; }) { const [to, setTo] = useState(replyTo ? replyTo.from[0]?.address ?? "" : ""); const [cc, setCc] = useState(""); const [subject, setSubject] = useState(replyTo ? `Re: ${replyTo.subject.replace(/^Re:\s*/i, "")}` : ""); const [body, setBody] = useState(replyTo ? `\n\n---\n${replyTo.text?.slice(0, 500) ?? ""}` : ""); const [attachments, setAttachments] = useState([]); const [sending, setSending] = useState(false); const [error, setError] = useState(""); const [dragOver, setDragOver] = useState(false); const fileInputRef = useRef(null); const addFiles = useCallback((files: FileList | null) => { if (!files) return; const newFiles = Array.from(files).map((f) => ({ file: f, name: f.name, size: f.size })); setAttachments((prev) => [...prev, ...newFiles]); }, []); const removeAttachment = (index: number) => { setAttachments((prev) => prev.filter((_, i) => i !== index)); }; const handleDrop = useCallback((e: React.DragEvent) => { e.preventDefault(); setDragOver(false); addFiles(e.dataTransfer.files); }, [addFiles]); const handleSend = async (e: React.FormEvent) => { e.preventDefault(); setSending(true); setError(""); try { if (attachments.length > 0) { // Use FormData for attachments const formData = new FormData(); formData.append("to", to); if (cc) formData.append("cc", cc); formData.append("subject", subject); formData.append("text", body); formData.append("html", `
${body.replace(/`);
        attachments.forEach((att) => {
          formData.append("attachments", att.file, att.name);
        });

        const res = await fetch("/api/mail/send", { method: "POST", body: formData });
        const data = await res.json();
        if (!res.ok) throw new Error(data.error || "Gönderilemedi");
      } else {
        // JSON for simple messages
        const res = await fetch("/api/mail/send", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({
            to, cc: cc || undefined, subject, text: body,
            html: `
${body.replace(/`,
          }),
        });
        const data = await res.json();
        if (!res.ok) throw new Error(data.error || "Gönderilemedi");
      }
      onSent();
    } catch (err: any) {
      setError(err.message);
    }
    setSending(false);
  };

  const totalSize = attachments.reduce((sum, a) => sum + a.size, 0);

  return (
    
e.target === e.currentTarget && onClose()}>

{replyTo ? "Yanıtla" : "Yeni Mail"}

{error &&
{error}
}
setTo(e.target.value)} required autoFocus />
setCc(e.target.value)} />
setSubject(e.target.value)} required />