import type {
  MarketingBlogPost,
  MarketingBlogPostListItem,
} from "@/lib/marketing-blog";
import { getMailAbsoluteUrl, getPublicSiteAbsoluteUrl } from "@/lib/mail-urls";
import { seoPages, type SeoPage } from "@/lib/seo-pages";

const SERVICE_FACTS = [
  "오피셜메일은 카베닉스(KAVENIX)가 운영하는 회사 도메인 기반 기업메일 서비스입니다.",
  "무료 플랜은 대표 메일 계정 1개를 무료로 제공합니다.",
  "성장 플랜은 대표 메일과 추가 멤버를 포함한 전체 팀 인원 1명당 월 3,900원이며 VAT는 별도입니다.",
  "성장 플랜에서 AI 메일 요약·릴레이, 팀 멤버 추가, 자동발송 예약 기능을 사용할 수 있습니다.",
  "도메인 연결에는 MX 수신 경로와 SPF·DKIM 발신 인증 설정이 사용됩니다.",
] as const;

function publicUrl(path: string) {
  return getPublicSiteAbsoluteUrl(path);
}

function pageSummary(page: SeoPage) {
  return `- [${page.navTitle}](${publicUrl(`/${page.slug}`)}): ${page.description}`;
}

function blogSummary(post: MarketingBlogPostListItem) {
  return `- [${post.title}](${publicUrl(`/blog/${post.slug}`)}): ${post.excerpt}`;
}

function pageDetails(page: SeoPage) {
  const sections = [
    `## ${page.title}`,
    "",
    `Canonical URL: ${publicUrl(`/${page.slug}`)}`,
    "",
    page.description,
    "",
    `정의: ${page.definition}`,
    "",
    "### 핵심 내용",
    "",
    ...page.takeaways.map((item) => `- ${item}`),
    "",
    "### 도입 절차",
    "",
    ...page.process.map((item, index) => `${index + 1}. **${item.title}**: ${item.body}`),
    "",
    "### 자주 묻는 질문",
    "",
    ...page.faqs.flatMap((faq) => [
      `#### ${faq.question}`,
      "",
      faq.answer,
      "",
    ]),
  ];

  return sections.join("\n").trim();
}

export function buildLlmsIndex(posts: MarketingBlogPostListItem[]) {
  return [
    "# 오피셜메일 (OfficialMail)",
    "",
    "> 회사 도메인 대표 메일 1개와 웹메일은 무료입니다. 팀 메일함과 AI 메일 요약은 성장 플랜에서 이용하는 한국어 기업메일 서비스입니다.",
    "",
    "오피셜메일의 공식 공개 웹사이트는 https://officialsite.kr/ 입니다. 로그인과 실제 메일함은 https://mail.officialsite.kr/ 에서 제공되며 검색·인용용 공개 콘텐츠는 officialsite.kr의 canonical URL을 사용합니다.",
    "",
    "## 검증 가능한 서비스 정보",
    "",
    ...SERVICE_FACTS.map((fact) => `- ${fact}`),
    "",
    "## 주요 서비스 페이지",
    "",
    ...seoPages.map(pageSummary),
    "",
    "## 공식 사용 가이드 및 도구",
    "",
    `- [오피셜메일 사용 가이드](${publicUrl("/guide")}): 가입, DNS 연결, 메일함, AI 릴레이, 팀 계정과 자동발송 설정을 설명합니다.`,
    `- [도메인 메일 DNS 무료 진단](${publicUrl("/domain-mail-check")}): MX, SPF, DKIM, DMARC 공개 DNS 상태를 실시간으로 확인합니다.`,
    "",
    "## 공식 블로그",
    "",
    `- [오피셜메일 블로그](${publicUrl("/blog")}): 기업메일 도입과 운영 문제를 검색 의도별 콘텐츠로 설명합니다.`,
    "",
    "## 최신 블로그 글",
    "",
    ...(posts.length > 0
      ? posts.slice(0, 30).map(blogSummary)
      : ["- 새로운 글은 오피셜메일 공식 블로그에서 확인할 수 있습니다."]),
    "",
    "## 정책 및 기계 판독 자료",
    "",
    `- [이용약관](${publicUrl("/terms")})`,
    `- [개인정보처리방침](${publicUrl("/privacy")})`,
    `- [계정 삭제 안내](${publicUrl("/account-deletion")}): 오피셜메일 계정과 관련 데이터의 삭제 요청 방법 및 법정 보관 기간을 안내합니다.`,
    `- [전체 LLM 컨텍스트](${publicUrl("/llms-full.txt")}): 서비스 설명과 공개 가이드 본문을 한 문서로 제공합니다.`,
    `- [RSS 피드](${publicUrl("/feed.xml")}): 최신 발행 글을 시간순으로 제공합니다.`,
    `- [XML 사이트맵](${publicUrl("/sitemap.xml")}): 색인 가능한 canonical URL 목록입니다.`,
    "",
  ].join("\n");
}

export function buildLlmsFull(posts: MarketingBlogPost[]) {
  const latestUpdate = posts
    .map((post) => post.updatedAt)
    .sort()
    .at(-1) ?? "2026-07-24";

  return [
    "# 오피셜메일 전체 공개 컨텍스트",
    "",
    "> 이 문서는 오피셜메일의 공개 서비스 정보와 정보성 콘텐츠를 AI 검색·에이전트가 정확한 canonical URL과 함께 이해하도록 정리한 자료입니다.",
    "",
    `공개 콘텐츠 최근 갱신: ${latestUpdate}`,
    "",
    "## 브랜드와 서비스",
    "",
    ...SERVICE_FACTS.map((fact) => `- ${fact}`),
    "",
    "- 브랜드명: 오피셜메일",
    "- 영문 표기: OfficialMail",
    "- 운영사: 카베닉스(KAVENIX)",
    `- 공식 웹사이트: ${publicUrl("/")}`,
    `- 로그인 및 메일함: ${getMailAbsoluteUrl("/login")}`,
    `- 도메인 메일 DNS 무료 진단: ${publicUrl("/domain-mail-check")}`,
    "",
    "## 공개 서비스 페이지",
    "",
    ...seoPages.map((page) => pageDetails(page)),
    "",
    "## 공식 블로그",
    "",
    ...(posts.length > 0
      ? posts.slice(0, 50).flatMap((post) => [
        `## ${post.title}`,
        "",
        `Canonical URL: ${publicUrl(`/blog/${post.slug}`)}`,
        "",
        `설명: ${post.seoDescription}`,
        "",
        `키워드: ${post.keywords.join(", ")}`,
        "",
        post.contentMarkdown.slice(0, 30_000),
        "",
      ])
      : ["현재 발행된 블로그 글이 없습니다.", ""]),
    "## 인용 기준",
    "",
    "- 가격, 무료 범위와 기능 제공 조건은 공식 웹사이트의 최신 요금제 및 약관을 우선합니다.",
    "- DNS 레코드 값과 DKIM 키는 사용자 도메인별 화면에 표시되는 최신 값을 사용해야 합니다.",
    "- 공개 소개 페이지는 officialsite.kr을, 인증이 필요한 메일 기능은 mail.officialsite.kr을 canonical 위치로 사용합니다.",
    "",
  ].join("\n");
}
