import "server-only";

import { formatKstDateTime } from "@/lib/billing-retry-schedule";

const OFFICIAL_MAIL_LOGO_URL =
  process.env.MAIL_AI_RELAY_LOGO_URL?.trim() ||
  "https://mail.officialsite.kr/images/officialmail-logo-128.png";

export type BillingFailureEmailInput = {
  amount: number;
  billableSeats: number;
  companyName: string;
  errorMessage: string;
  graceEndsAt: Date;
  netPricePerMember: number;
  nextRetryAt: Date | null;
};

function escapeHtml(value: string) {
  return value
    .replaceAll("&", "&amp;")
    .replaceAll("<", "&lt;")
    .replaceAll(">", "&gt;")
    .replaceAll('"', "&quot;")
    .replaceAll("'", "&#039;");
}

function formatWon(amount: number) {
  return `${Math.max(0, Math.round(amount)).toLocaleString("ko-KR")}원`;
}

export function renderBillingFailureEmail(input: BillingFailureEmailInput) {
  const billingUrl = "https://mail.officialsite.kr/mail?panel=setup&section=billing";
  const logoUrl = escapeHtml(OFFICIAL_MAIL_LOGO_URL);
  const billableSeats = Math.max(1, Math.floor(input.billableSeats));
  const netPricePerMember = Math.max(0, Math.round(input.netPricePerMember));
  const netAmount = netPricePerMember * billableSeats;
  const vatAmount = Math.max(0, Math.round(input.amount) - netAmount);
  const billingComposition = `성장 플랜 ${formatWon(netPricePerMember)} × ${billableSeats}명`;
  const nextRetryText = input.nextRetryAt
    ? `${formatKstDateTime(input.nextRetryAt)}부터 09시·12시·15시에 다시 시도합니다.`
    : "오늘 15시 재시도까지 완료되지 않아 무료 플랜으로 전환됩니다.";
  const bodyText = [
    `${input.companyName}님의 성장 플랜 결제가 완료되지 않았습니다.`,
    "",
    `결제 구성: ${billingComposition}`,
    `공급가액: ${formatWon(netAmount)}`,
    `부가세: ${formatWon(vatAmount)}`,
    `최종 결제 예정 금액: ${formatWon(input.amount)}`,
    `실패 사유: ${input.errorMessage}`,
    `다음 결제 시도: ${nextRetryText}`,
    `유예 종료: ${formatKstDateTime(input.graceEndsAt)}`,
    "",
    "결제 실패 후 3일 동안 매일 09시, 12시, 15시에 자동으로 다시 시도합니다.",
    "유예기간 안에 결제가 완료되지 않으면 대표 계정은 무료 플랜으로 전환되고 추가 멤버 계정은 일시 정지됩니다. 메일 데이터는 삭제되지 않습니다.",
    "",
    `결제수단 확인: ${billingUrl}`,
    "",
    "오피셜메일",
  ].join("\n");
  const bodyHtml = `<!doctype html>
<html lang="ko">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"></head>
<body style="margin:0;padding:0;background:#f4f7fb;font-family:'Apple SD Gothic Neo','Noto Sans KR',Arial,sans-serif;color:#16233c;">
  <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="background:#f4f7fb;">
    <tr><td align="center" style="padding:32px 16px;">
      <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="max-width:620px;background:#ffffff;border:1px solid #e4eaf3;border-radius:18px;overflow:hidden;">
        <tr><td style="padding:30px 32px 14px;">
          <table role="presentation" cellspacing="0" cellpadding="0" border="0"><tr>
            <td width="28" height="28" style="width:28px;height:28px;padding:0;vertical-align:middle;"><img src="${logoUrl}" width="28" height="28" alt="" style="display:block;width:28px;height:28px;border:0;outline:none;text-decoration:none;"></td>
            <td style="padding-left:10px;font-size:18px;line-height:28px;font-weight:800;letter-spacing:-.04em;color:#2f6df6;vertical-align:middle;">오피셜메일</td>
          </tr></table>
        </td></tr>
        <tr><td style="padding:0 32px 10px;font-size:24px;line-height:1.4;font-weight:800;letter-spacing:-0.04em;">성장 플랜 결제가<br>완료되지 않았습니다</td></tr>
        <tr><td style="padding:0 32px 24px;font-size:14px;line-height:1.75;color:#5f7190;">등록된 결제수단으로 정기결제를 완료하지 못했습니다. 결제수단을 확인하면 다음 예약 시각에 자동으로 다시 시도합니다.</td></tr>
        <tr><td style="padding:0 32px 22px;">
          <table role="presentation" width="100%" cellspacing="0" cellpadding="0" border="0" style="background:#f7f9fd;border:1px solid #e7ecf5;border-radius:12px;">
            <tr><td style="padding:17px 18px 6px;font-size:12px;color:#7a8ba5;">계정</td><td align="right" style="padding:17px 18px 6px;font-size:13px;font-weight:700;">${escapeHtml(input.companyName)}</td></tr>
            <tr><td style="padding:6px 18px;font-size:12px;color:#7a8ba5;">결제 구성</td><td align="right" style="padding:6px 18px;font-size:13px;font-weight:700;">${escapeHtml(billingComposition)}</td></tr>
            <tr><td style="padding:6px 18px;font-size:12px;color:#7a8ba5;">공급가액</td><td align="right" style="padding:6px 18px;font-size:13px;font-weight:700;">${formatWon(netAmount)}</td></tr>
            <tr><td style="padding:6px 18px;font-size:12px;color:#7a8ba5;">부가세</td><td align="right" style="padding:6px 18px;font-size:13px;font-weight:700;">${formatWon(vatAmount)}</td></tr>
            <tr><td style="padding:10px 18px 9px;border-top:1px solid #e5ebf5;font-size:12px;font-weight:700;color:#526784;">최종 결제 예정 금액</td><td align="right" style="padding:10px 18px 9px;border-top:1px solid #e5ebf5;font-size:15px;font-weight:800;color:#2f6df6;">${formatWon(input.amount)}</td></tr>
            <tr><td style="padding:6px 18px;font-size:12px;color:#7a8ba5;">실패 사유</td><td align="right" style="padding:6px 18px;font-size:13px;font-weight:700;color:#d84b4b;">${escapeHtml(input.errorMessage)}</td></tr>
            <tr><td style="padding:6px 18px;font-size:12px;color:#7a8ba5;">다음 시도</td><td align="right" style="padding:6px 18px;font-size:13px;font-weight:700;">${escapeHtml(nextRetryText)}</td></tr>
            <tr><td style="padding:6px 18px 17px;font-size:12px;color:#7a8ba5;">유예 종료</td><td align="right" style="padding:6px 18px 17px;font-size:13px;font-weight:700;">${formatKstDateTime(input.graceEndsAt)}</td></tr>
          </table>
        </td></tr>
        <tr><td style="padding:0 32px 22px;font-size:13px;line-height:1.75;color:#526784;">
          결제 실패 후 <strong>3일 동안 매일 09시, 12시, 15시</strong>에 자동으로 다시 시도합니다. 유예기간 안에 결제가 완료되지 않으면 대표 계정은 무료 플랜으로 전환되고 추가 멤버 계정은 일시 정지됩니다. <strong>기존 메일 데이터는 삭제되지 않습니다.</strong>
        </td></tr>
        <tr><td align="center" style="padding:0 32px 30px;"><a href="${billingUrl}" target="_blank" style="display:block;padding:14px 20px;border-radius:11px;background:#2f6df6;color:#ffffff;text-decoration:none;font-size:14px;font-weight:700;">결제수단 확인하기</a></td></tr>
        <tr><td style="border-top:1px solid #edf1f6;padding:18px 32px 24px;font-size:11px;line-height:1.7;color:#8a98ad;">본 메일은 오피셜메일 성장 플랜 정기결제 상태를 안내하는 자동 알림입니다.</td></tr>
      </table>
    </td></tr>
  </table>
</body>
</html>`;

  return {
    bodyHtml,
    bodyText,
    subject: "[오피셜메일] 성장 플랜 결제가 완료되지 않았습니다",
  };
}
