import type { Metadata } from "next";
import Link from "next/link";

import { SiteFooter } from "@/components/site-footer";
import { PublicLanguageMenu } from "@/components/public-language-controls";
import { PublicLocaleSuggestionForRequest } from "@/components/public-locale-suggestion-server";
import { ServerStaticUiLocalizer } from "@/components/server-static-ui-localizer";
import type { SupportedLocale } from "@/lib/i18n-config";
import { resolveRequestLocale } from "@/lib/i18n-server";
import {
  getLocalizedPublicPath,
  getPublicLanguageAlternates,
} from "@/lib/i18n-urls";
import {
  getPublicSiteAbsoluteUrl,
  getPublicSiteUrl,
} from "@/lib/mail-urls";
import { OFFICIAL_MAIL_SITE_NAME } from "@/lib/official-mail-brand";

type Copy = {
  badge: string;
  title: string;
  lead: string;
  operator: string;
  stepsTitle: string;
  steps: readonly string[];
  requestButton: string;
  deleteTitle: string;
  deleteItems: readonly string[];
  retainTitle: string;
  retainLead: string;
  retainItems: readonly string[];
  partialTitle: string;
  partialBody: string;
  noteTitle: string;
  noteBody: string;
  home: string;
};

const COPY: Record<SupportedLocale, Copy> = {
  ko: {
    badge: "ACCOUNT & DATA",
    title: "오피셜메일 계정 삭제 안내",
    lead:
      "오피셜메일(OfficialMail) 계정과 연결된 데이터의 삭제를 요청하는 방법, 삭제되는 항목, 법령에 따라 일정 기간 보관되는 항목을 안내합니다.",
    operator: "앱 및 서비스 운영사: 카베닉스(KAVENIX)",
    stepsTitle: "계정 삭제 요청 방법",
    steps: [
      "오피셜메일 가입 시 등록한 대표 메일 또는 보조 이메일에서 admin@officialsite.kr로 삭제 요청 메일을 보내주세요.",
      "메일 제목을 ‘오피셜메일 계정 삭제 요청’으로 적고, 본문에 대표 메일 주소, 연결 도메인, 사업자명을 작성해주세요.",
      "계정 도용 방지를 위해 등록 정보나 보조 이메일을 통한 본인확인을 요청할 수 있습니다.",
      "본인확인이 완료되면 이용 중인 유료 구독과 처리 중인 신청을 확인한 뒤 계정 및 관련 데이터를 지체 없이 삭제하고 결과를 회신합니다.",
    ],
    requestButton: "계정 삭제 요청 메일 보내기",
    deleteTitle: "삭제되는 데이터",
    deleteItems: [
      "로그인 계정, 표시 이름, 보조 이메일 등 계정 정보",
      "연결 도메인, 메일함, 멤버 및 DNS 연결 설정",
      "보관 중인 메일, 첨부파일, 폴더, 읽음·중요 상태",
      "AI Assist Bridge 설정과 계정에 연결된 요약·릴레이 이력",
      "자동발송 예약 설정과 계정에 연결된 발송 대상 및 로그",
    ],
    retainTitle: "법령에 따라 보관되는 데이터",
    retainLead:
      "계정 삭제 후에도 아래 기록은 관계 법령 준수와 분쟁 대응을 위해 정해진 기간 동안 별도로 보관한 뒤 안전하게 파기합니다.",
    retainItems: [
      "계약 또는 청약철회 기록: 5년",
      "결제 및 재화·서비스 공급 기록: 5년",
      "소비자 불만 또는 분쟁 처리 기록: 3년",
      "서비스 접속 기록: 3개월",
      "법적 보관 의무가 없는 계정·메일 데이터는 본인확인 및 삭제 처리 완료 후 보관하지 않습니다.",
    ],
    partialTitle: "계정은 유지하고 일부 데이터만 삭제하려면",
    partialBody:
      "메일함에서 개별 메일과 첨부파일을 삭제하거나 휴지통을 비울 수 있습니다. 계정 정보의 열람·정정·일부 삭제 요청은 admin@officialsite.kr로 접수해주세요.",
    noteTitle: "삭제 전에 확인해주세요",
    noteBody:
      "계정이 삭제되면 메일 송수신과 도메인 연결이 중단되며 삭제된 메일과 첨부파일은 복구할 수 없습니다. 필요한 데이터는 요청 전에 직접 백업해주세요.",
    home: "홈으로",
  },
  en: {
    badge: "ACCOUNT & DATA",
    title: "Delete your OfficialMail account",
    lead:
      "This page explains how to request deletion of your OfficialMail account and associated data, what is deleted, and what must be retained by law.",
    operator: "App and service operator: KAVENIX",
    stepsTitle: "How to request account deletion",
    steps: [
      "Send a request to admin@officialsite.kr from the primary or recovery email registered with OfficialMail.",
      "Use the subject ‘OfficialMail account deletion request’ and include the primary mailbox address, connected domain, and business name.",
      "We may verify ownership using registered account information or the recovery email to prevent unauthorized deletion.",
      "After verification, we review active subscriptions and pending requests, delete the account and associated data without undue delay, and email the result.",
    ],
    requestButton: "Email an account deletion request",
    deleteTitle: "Data that will be deleted",
    deleteItems: [
      "Account details such as login account, display name, and recovery email",
      "Connected domains, mailboxes, members, and DNS connection settings",
      "Stored email, attachments, folders, and read or importance states",
      "AI Assist Bridge settings and account-linked summary or relay history",
      "Scheduled sending settings, account-linked recipients, and logs",
    ],
    retainTitle: "Data retained to comply with law",
    retainLead:
      "The following records are kept separately for the stated period to comply with law and resolve disputes, then securely destroyed.",
    retainItems: [
      "Contract or cancellation records: 5 years",
      "Payment and service supply records: 5 years",
      "Consumer complaint or dispute records: 3 years",
      "Service access logs: 3 months",
      "Account and mail data with no legal retention requirement is not retained after identity verification and deletion are complete.",
    ],
    partialTitle: "Delete data without deleting your account",
    partialBody:
      "You can delete individual messages and attachments or empty Trash in the mailbox. Email admin@officialsite.kr to request access, correction, or partial deletion of account information.",
    noteTitle: "Before you delete",
    noteBody:
      "Deletion stops mail delivery and domain connection. Deleted messages and attachments cannot be recovered, so export any data you need before requesting deletion.",
    home: "Home",
  },
  zh: {
    badge: "账户与数据",
    title: "删除 OfficialMail 账号",
    lead: "本页说明如何申请删除 OfficialMail 账号及关联数据、将被删除的数据，以及依法必须保留的数据。",
    operator: "应用与服务运营方：KAVENIX",
    stepsTitle: "账号删除申请步骤",
    steps: [
      "请使用注册 OfficialMail 时登记的主邮箱或辅助邮箱，向 admin@officialsite.kr 发送删除申请。",
      "邮件主题填写“OfficialMail 账号删除申请”，正文注明主邮箱地址、已连接域名和企业名称。",
      "为防止未经授权的删除，我们可能通过注册信息或辅助邮箱验证身份。",
      "验证完成后，我们会确认有效订阅和待处理申请，及时删除账号及关联数据，并通过邮件通知结果。",
    ],
    requestButton: "发送账号删除申请",
    deleteTitle: "将被删除的数据",
    deleteItems: ["登录账号、显示名称和辅助邮箱等账号信息", "已连接域名、邮箱、成员和 DNS 设置", "已存邮件、附件、文件夹及已读或重要状态", "AI Assist Bridge 设置及摘要、转发记录", "定时发送设置、收件人和日志"],
    retainTitle: "依法保留的数据",
    retainLead: "以下记录将在规定期限内单独保存，用于遵守法律和处理争议，期满后安全销毁。",
    retainItems: ["合同或撤销记录：5年", "付款及服务提供记录：5年", "消费者投诉或争议记录：3年", "服务访问日志：3个月", "无保留义务的账号和邮件数据会在身份验证和删除完成后停止保留。"],
    partialTitle: "仅删除部分数据",
    partialBody: "您可以在邮箱中删除单封邮件和附件或清空垃圾箱。如需查阅、更正或部分删除账号信息，请联系 admin@officialsite.kr。",
    noteTitle: "删除前请确认",
    noteBody: "删除账号后，邮件收发和域名连接将停止，已删除邮件和附件无法恢复。请提前备份所需数据。",
    home: "首页",
  },
  ja: {
    badge: "アカウントとデータ",
    title: "OfficialMailアカウント削除のご案内",
    lead: "OfficialMailアカウントと関連データの削除方法、削除対象、法令により保管される情報を説明します。",
    operator: "アプリ・サービス運営者：KAVENIX",
    stepsTitle: "アカウント削除の申請方法",
    steps: [
      "登録済みの代表メールまたは予備メールから admin@officialsite.kr へ削除申請を送信してください。",
      "件名を「OfficialMailアカウント削除申請」とし、代表メールアドレス、接続ドメイン、事業者名を記載してください。",
      "不正な削除を防ぐため、登録情報または予備メールで本人確認を行う場合があります。",
      "本人確認後、有効な契約と処理中の申請を確認し、アカウントと関連データを速やかに削除して結果をメールで通知します。",
    ],
    requestButton: "アカウント削除を申請する",
    deleteTitle: "削除されるデータ",
    deleteItems: ["ログイン、表示名、予備メールなどのアカウント情報", "接続ドメイン、メールボックス、メンバー、DNS設定", "保存メール、添付、フォルダー、既読・重要状態", "AI Assist Bridgeの設定と要約・リレー履歴", "予約送信の設定、宛先、ログ"],
    retainTitle: "法令により保管されるデータ",
    retainLead: "以下の記録は法令遵守と紛争対応のため定められた期間だけ分離保管し、期間終了後に安全に破棄します。",
    retainItems: ["契約・解約記録：5年", "決済・サービス提供記録：5年", "苦情・紛争処理記録：3年", "サービス接続記録：3か月", "法的保管義務のないアカウント・メールデータは本人確認と削除完了後に保管しません。"],
    partialTitle: "アカウントを残して一部データを削除する場合",
    partialBody: "メールボックスで個別のメールや添付を削除し、ゴミ箱を空にできます。アカウント情報の開示・訂正・一部削除は admin@officialsite.kr へ申請してください。",
    noteTitle: "削除前のご確認",
    noteBody: "削除するとメール送受信とドメイン接続が停止し、削除済みメールや添付は復元できません。必要なデータは事前に保存してください。",
    home: "ホーム",
  },
  vi: {
    badge: "TÀI KHOẢN VÀ DỮ LIỆU",
    title: "Xóa tài khoản OfficialMail",
    lead: "Trang này giải thích cách yêu cầu xóa tài khoản OfficialMail và dữ liệu liên quan, dữ liệu sẽ bị xóa và dữ liệu phải lưu theo pháp luật.",
    operator: "Đơn vị vận hành ứng dụng và dịch vụ: KAVENIX",
    stepsTitle: "Cách yêu cầu xóa tài khoản",
    steps: [
      "Gửi yêu cầu đến admin@officialsite.kr từ địa chỉ chính hoặc email khôi phục đã đăng ký với OfficialMail.",
      "Đặt tiêu đề ‘Yêu cầu xóa tài khoản OfficialMail’ và ghi địa chỉ hộp thư chính, tên miền đã kết nối cùng tên doanh nghiệp.",
      "Chúng tôi có thể xác minh bằng thông tin đăng ký hoặc email khôi phục để ngăn việc xóa trái phép.",
      "Sau khi xác minh, chúng tôi kiểm tra gói đang hoạt động và yêu cầu đang xử lý, xóa tài khoản cùng dữ liệu liên quan không chậm trễ và gửi kết quả qua email.",
    ],
    requestButton: "Gửi email yêu cầu xóa tài khoản",
    deleteTitle: "Dữ liệu sẽ bị xóa",
    deleteItems: ["Thông tin đăng nhập, tên hiển thị và email khôi phục", "Tên miền, hộp thư, thành viên và cài đặt DNS", "Email, tệp đính kèm, thư mục và trạng thái đã đọc hoặc quan trọng", "Cài đặt AI Assist Bridge và lịch sử tóm tắt hoặc chuyển tiếp", "Cài đặt gửi theo lịch, người nhận và nhật ký"],
    retainTitle: "Dữ liệu lưu theo quy định pháp luật",
    retainLead: "Các hồ sơ sau được lưu riêng trong thời hạn quy định để tuân thủ pháp luật và giải quyết tranh chấp, sau đó sẽ được hủy an toàn.",
    retainItems: ["Hồ sơ hợp đồng hoặc hủy: 5 năm", "Hồ sơ thanh toán và cung cấp dịch vụ: 5 năm", "Hồ sơ khiếu nại hoặc tranh chấp: 3 năm", "Nhật ký truy cập dịch vụ: 3 tháng", "Dữ liệu tài khoản và email không có nghĩa vụ lưu giữ sẽ không được giữ lại sau khi xác minh và xóa hoàn tất."],
    partialTitle: "Xóa dữ liệu nhưng vẫn giữ tài khoản",
    partialBody: "Bạn có thể xóa từng email, tệp đính kèm hoặc dọn Thùng rác. Hãy gửi email đến admin@officialsite.kr để yêu cầu truy cập, chỉnh sửa hoặc xóa một phần thông tin tài khoản.",
    noteTitle: "Trước khi xóa",
    noteBody: "Việc xóa sẽ dừng nhận gửi thư và kết nối tên miền. Email và tệp đã xóa không thể khôi phục, vì vậy hãy sao lưu trước.",
    home: "Trang chủ",
  },
  ru: {
    badge: "АККАУНТ И ДАННЫЕ",
    title: "Удаление аккаунта OfficialMail",
    lead: "Здесь описано, как запросить удаление аккаунта OfficialMail и связанных данных, какие данные удаляются и какие записи хранятся по закону.",
    operator: "Оператор приложения и сервиса: KAVENIX",
    stepsTitle: "Как запросить удаление аккаунта",
    steps: [
      "Отправьте запрос на admin@officialsite.kr с основного или резервного адреса, зарегистрированного в OfficialMail.",
      "Укажите тему «Запрос на удаление аккаунта OfficialMail», основной адрес ящика, подключенный домен и название компании.",
      "Для защиты от несанкционированного удаления мы можем подтвердить личность по регистрационным данным или резервному адресу.",
      "После проверки мы проверим активные подписки и незавершенные заявки, без неоправданной задержки удалим аккаунт и связанные данные и сообщим результат по email.",
    ],
    requestButton: "Отправить запрос на удаление",
    deleteTitle: "Какие данные удаляются",
    deleteItems: ["Данные аккаунта, включая логин, отображаемое имя и резервный email", "Домены, ящики, участники и настройки DNS", "Письма, вложения, папки и отметки прочтения или важности", "Настройки AI Assist Bridge и история сводок или пересылок", "Настройки отложенной отправки, получатели и журналы"],
    retainTitle: "Данные, сохраняемые по закону",
    retainLead: "Следующие записи хранятся отдельно в течение установленного срока для соблюдения закона и разрешения споров, затем безопасно уничтожаются.",
    retainItems: ["Записи о договорах или отмене: 5 лет", "Записи о платежах и оказании услуг: 5 лет", "Жалобы и споры: 3 года", "Журналы доступа к сервису: 3 месяца", "Данные аккаунта и почты без обязанности хранения не сохраняются после проверки личности и завершения удаления."],
    partialTitle: "Удаление данных без удаления аккаунта",
    partialBody: "В ящике можно удалить отдельные письма и вложения или очистить Корзину. Запросы на доступ, исправление или частичное удаление данных аккаунта направляйте на admin@officialsite.kr.",
    noteTitle: "Перед удалением",
    noteBody: "После удаления прекратятся доставка почты и подключение домена. Удаленные письма и вложения восстановить нельзя, поэтому заранее сохраните нужные данные.",
    home: "На главную",
  },
};

export async function generateMetadata(): Promise<Metadata> {
  const locale = await resolveRequestLocale();
  const copy = COPY[locale];
  const pathname = "/account-deletion";
  const canonical = getPublicSiteAbsoluteUrl(
    getLocalizedPublicPath(pathname, locale),
  );

  return {
    title: `${copy.title} | OfficialMail`,
    description: copy.lead,
    alternates: {
      canonical,
      languages: getPublicLanguageAlternates(pathname, getPublicSiteUrl()),
    },
    openGraph: {
      title: `${copy.title} | OfficialMail`,
      description: copy.lead,
      type: "website",
      url: canonical,
      siteName: OFFICIAL_MAIL_SITE_NAME,
      images: [getPublicSiteAbsoluteUrl("/images/officialmail-og-20260923.png")],
    },
  };
}

function MailMark() {
  return (
    <span className="inline-flex items-center justify-center text-[#2f6df6]">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.8" strokeLinecap="round" strokeLinejoin="round" className="h-[32px] w-[32px] sm:h-[40px] sm:w-[40px]" aria-hidden="true">
        <rect x="3.5" y="5.5" width="17" height="13" rx="2.5" />
        <path d="m4.8 7 7.2 5.6L19.2 7" />
      </svg>
    </span>
  );
}

export default async function AccountDeletionPage() {
  const locale = await resolveRequestLocale();
  const copy = COPY[locale];
  const requestSubject = encodeURIComponent(
    locale === "ko"
      ? "오피셜메일 계정 삭제 요청"
      : "OfficialMail account deletion request",
  );

  return (
    <ServerStaticUiLocalizer locale={locale}>
      <div className="min-h-screen bg-white text-[#223250]">
        <div className="sticky top-0 z-30">
        <PublicLocaleSuggestionForRequest pathname="/account-deletion" />
        <header className="border-b border-black/5 bg-white/94 shadow-sm backdrop-blur-xl backdrop-saturate-150">
          <div className="mx-auto flex h-[62px] w-full max-w-[1420px] items-center justify-between px-4 sm:h-20 sm:px-8 xl:px-10">
            <Link href={getLocalizedPublicPath("/", locale)} className="flex items-center gap-2.5 sm:gap-3">
              <MailMark />
              <span className="text-[22px] font-extrabold tracking-[-0.08em] text-[#2f6df6]">{locale === "ko" ? "오피셜메일" : "OfficialMail"}</span>
            </Link>
            <div className="flex items-center gap-2">
              <PublicLanguageMenu currentLocale={locale} pathname="/account-deletion" />
              <Link href={getLocalizedPublicPath("/", locale)} className="text-[13px] font-semibold text-[#68758a] transition-colors hover:text-[#2f6df6]">
                ← {copy.home}
              </Link>
            </div>
          </div>
        </header>
        </div>

        <main className="px-4 pb-16 pt-12 sm:px-8 sm:pb-24 sm:pt-16 xl:px-10">
          <div className="mx-auto w-full max-w-[1420px]">
            <section className="border-b border-[#e4eaf2] pb-10 sm:pb-12">
              <p className="text-[12px] font-semibold uppercase tracking-[0.18em] text-[#2f6df6]">{copy.badge}</p>
              <h1 className="mt-4 text-[34px] font-semibold tracking-[-0.05em] text-[#111a33] sm:text-[42px]">{copy.title}</h1>
              <p className="mt-4 max-w-[900px] text-[15px] leading-7 text-[#64748f] sm:text-[16px]">{copy.lead}</p>
              <p className="mt-5 text-[13px] font-semibold text-[#50627f]">{copy.operator}</p>
            </section>

            <div className="mt-2 divide-y divide-[#e4eaf2]">
              <section id="request" className="grid gap-5 py-9 lg:grid-cols-[280px_minmax(0,1fr)] lg:gap-14">
                <h2 className="text-[20px] font-semibold tracking-[-0.03em] text-[#16233c] sm:text-[21px]">{copy.stepsTitle}</h2>
                <div>
                  <ol className="space-y-4">
                    {copy.steps.map((step, index) => (
                      <li key={step} className="flex gap-3 text-[15px] leading-7 text-[#5f6f89]">
                        <span className="inline-flex h-7 w-7 shrink-0 items-center justify-center rounded-full bg-[#edf4ff] text-[12px] font-bold text-[#2f6df6]">{index + 1}</span>
                        <span>{step}</span>
                      </li>
                    ))}
                  </ol>
                  <a href={`mailto:admin@officialsite.kr?subject=${requestSubject}`} className="mt-6 inline-flex h-11 items-center justify-center rounded-[12px] bg-[#2f6df6] px-5 text-[14px] font-semibold text-white transition-colors hover:bg-[#245fdd]">
                    {copy.requestButton}
                  </a>
                </div>
              </section>

              <section id="deleted-data" className="grid gap-5 py-9 lg:grid-cols-[280px_minmax(0,1fr)] lg:gap-14">
                <h2 className="text-[20px] font-semibold tracking-[-0.03em] text-[#16233c] sm:text-[21px]">{copy.deleteTitle}</h2>
                <ul className="space-y-3">
                  {copy.deleteItems.map((item) => (
                    <li key={item} className="flex gap-3 text-[15px] leading-7 text-[#5f6f89]">
                      <span className="mt-2.5 h-1.5 w-1.5 shrink-0 rounded-full bg-[#2f6df6]" />
                      <span>{item}</span>
                    </li>
                  ))}
                </ul>
              </section>

              <section id="retained-data" className="grid gap-5 py-9 lg:grid-cols-[280px_minmax(0,1fr)] lg:gap-14">
                <h2 className="text-[20px] font-semibold tracking-[-0.03em] text-[#16233c] sm:text-[21px]">{copy.retainTitle}</h2>
                <div>
                  <p className="text-[15px] leading-7 text-[#5f6f89]">{copy.retainLead}</p>
                  <ul className="mt-5 space-y-3">
                    {copy.retainItems.map((item) => (
                      <li key={item} className="flex gap-3 text-[15px] leading-7 text-[#5f6f89]">
                        <span className="mt-2.5 h-1.5 w-1.5 shrink-0 rounded-full bg-[#7891b8]" />
                        <span>{item}</span>
                      </li>
                    ))}
                  </ul>
                </div>
              </section>

              <section id="partial-deletion" className="grid gap-5 py-9 lg:grid-cols-[280px_minmax(0,1fr)] lg:gap-14">
                <h2 className="text-[20px] font-semibold tracking-[-0.03em] text-[#16233c] sm:text-[21px]">{copy.partialTitle}</h2>
                <p className="text-[15px] leading-7 text-[#5f6f89]">{copy.partialBody}</p>
              </section>

              <section id="before-deletion" className="grid gap-5 py-9 lg:grid-cols-[280px_minmax(0,1fr)] lg:gap-14">
                <h2 className="text-[20px] font-semibold tracking-[-0.03em] text-[#5a4327] sm:text-[21px]">{copy.noteTitle}</h2>
                <p className="text-[15px] leading-7 text-[#735d42]">{copy.noteBody}</p>
              </section>
            </div>
          </div>
        </main>

        <SiteFooter className="bg-white" />
      </div>
    </ServerStaticUiLocalizer>
  );
}
