import { getSessionUser } from "@/lib/auth";
import {
  removeMailSignatureImageByEmail,
  uploadMailSignatureImageByEmail,
} from "@/lib/mail-signature";

export const runtime = "nodejs";

function imageUploadError(error: unknown) {
  if (!(error instanceof Error)) {
    return { message: "서명 이미지를 업로드하지 못했습니다.", status: 500 };
  }

  if (error.message === "signature-image-empty") {
    return { message: "비어 있는 이미지는 업로드할 수 없습니다.", status: 400 };
  }

  if (error.message === "signature-image-too-large") {
    return { message: "서명 이미지는 5MB 이하로 올려주세요.", status: 400 };
  }

  if (error.message === "signature-image-invalid") {
    return { message: "JPG, PNG, GIF, WebP 이미지만 사용할 수 있습니다.", status: 400 };
  }

  return { message: "서명 이미지를 업로드하지 못했습니다.", status: 500 };
}

export async function POST(request: Request) {
  const user = await getSessionUser();

  if (!user) {
    return Response.json({ error: "unauthorized" }, { status: 401 });
  }

  const formData = await request.formData();
  const file = formData.get("file");

  if (!(file instanceof File)) {
    return Response.json({ error: "이미지 파일을 선택해주세요." }, { status: 400 });
  }

  try {
    const signature = await uploadMailSignatureImageByEmail({
      body: Buffer.from(await file.arrayBuffer()),
      contentType: file.type,
      email: user.email,
      filename: file.name,
    });

    return Response.json({ ok: true, signature });
  } catch (error) {
    const mapped = imageUploadError(error);
    return Response.json({ error: mapped.message }, { status: mapped.status });
  }
}

export async function DELETE() {
  const user = await getSessionUser();

  if (!user) {
    return Response.json({ error: "unauthorized" }, { status: 401 });
  }

  try {
    return Response.json({
      ok: true,
      signature: await removeMailSignatureImageByEmail(user.email),
    });
  } catch (error) {
    console.error("Mail signature image removal failed", error);
    return Response.json({ error: "서명 이미지를 삭제하지 못했습니다." }, { status: 500 });
  }
}
