import { after } from "next/server";
import {
  createPartnerInquiry,
  sendPartnerInquiryNotification,
} from "@/lib/partner-inquiries";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

type PartnerInquiryPayload = {
  organizationName?: unknown;
  contactName?: unknown;
  contactEmail?: unknown;
  contactPhone?: unknown;
  platformType?: unknown;
  platformTypeCustom?: unknown;
  estimatedMembers?: unknown;
  message?: unknown;
  consented?: unknown;
  website?: unknown;
};

const errorMessages: Record<string, string> = {
  "partner-inquiry-consent-required": "개인정보 수집·이용에 동의해주세요.",
  "partner-inquiry-custom-platform-required": "제휴 플랫폼 유형을 직접 입력해주세요.",
  "partner-inquiry-invalid-email": "담당자 이메일 주소를 정확히 입력해주세요.",
  "partner-inquiry-required-fields": "기관명, 담당자명, 이메일과 제휴 유형을 확인해주세요.",
  "partner-inquiry-too-frequent": "이미 접수된 문의가 있습니다. 잠시 후 다시 확인해주세요.",
};

export async function POST(request: Request) {
  const payload = (await request.json().catch(() => null)) as PartnerInquiryPayload | null;

  if (!payload) {
    return Response.json(
      { ok: false, message: "문의 내용을 다시 확인해주세요." },
      { status: 400 },
    );
  }

  try {
    const inquiry = await createPartnerInquiry(payload);

    if (inquiry) {
      after(async () => {
        try {
          await sendPartnerInquiryNotification(inquiry);
        } catch (error) {
          console.error("partner-inquiry-notification-failed", {
            inquiryId: inquiry.id,
            message: error instanceof Error ? error.message : "unknown-error",
          });
        }
      });
    }

    return Response.json({ ok: true, inquiryId: inquiry?.id ?? 0 });
  } catch (error) {
    const code = error instanceof Error ? error.message : "partner-inquiry-save-failed";

    return Response.json(
      {
        ok: false,
        message: errorMessages[code] ?? "제휴 문의 접수 중 오류가 발생했습니다. 잠시 후 다시 시도해주세요.",
      },
      { status: code === "partner-inquiry-too-frequent" ? 409 : code.startsWith("partner-inquiry-") ? 400 : 500 },
    );
  }
}
