import type { Metadata } from "next";
import { AdsenseContentAd } from "@/components/adsense-content-ad";
import { DomainMailChecker } from "@/components/domain-mail-checker";
import { PublicBlogHeader } from "@/components/public-blog-header";
import { SiteFooter } from "@/components/site-footer";
import { ServerStaticUiLocalizer } from "@/components/server-static-ui-localizer";
import { diagnoseDomainMail } from "@/lib/domain-mail-diagnostics";
import { getPublicSiteAbsoluteUrl } from "@/lib/mail-urls";
import { OFFICIAL_MAIL_SAME_AS } from "@/lib/official-mail-brand";
import { resolveRequestLocale } from "@/lib/i18n-server";
import { buildPublicPageMetadata, getPublicSeoCopy } from "@/lib/public-seo-i18n";
import { getAdsenseSlot } from "@/lib/adsense-server";

type DomainMailCheckPageProps = {
  searchParams: Promise<{ domain?: string | string[] }>;
};

const pageUrl = getPublicSiteAbsoluteUrl("/domain-mail-check");
const socialImageUrl = getPublicSiteAbsoluteUrl("/blog/generated/gmail-550-authentication.webp");

export async function generateMetadata(): Promise<Metadata> {
  return buildPublicPageMetadata({
    imageUrl: socialImageUrl,
    locale: await resolveRequestLocale(),
    page: "domainCheck",
    pathname: "/domain-mail-check",
  });
}

function JsonLd({ data }: { data: Record<string, unknown> }) {
  return <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(data) }} />;
}

export default async function DomainMailCheckPage({ searchParams }: DomainMailCheckPageProps) {
  const locale = await resolveRequestLocale();
  const params = await searchParams;
  const initialDomain = typeof params.domain === "string" ? params.domain : "";
  const initialResult = initialDomain
    ? await diagnoseDomainMail(initialDomain).catch(() => null)
    : null;
  const schema = {
    "@context": "https://schema.org",
    "@type": "WebApplication",
    name: "오피셜메일 도메인 메일 DNS 진단기",
    applicationCategory: "BusinessApplication",
    browserRequirements: "JavaScript",
    description: getPublicSeoCopy("domainCheck", locale).description,
    inLanguage: locale,
    isAccessibleForFree: true,
    operatingSystem: "Web",
    url: pageUrl,
    provider: {
      "@type": "Organization",
      "@id": `${getPublicSiteAbsoluteUrl("/")}#organization`,
      legalName: "카베닉스(KAVENIX)",
      name: "오피셜메일",
      sameAs: OFFICIAL_MAIL_SAME_AS,
      url: getPublicSiteAbsoluteUrl("/"),
    },
  };

  return (
    <ServerStaticUiLocalizer locale={locale}>
    <main className="min-h-screen bg-white text-[#16233c]">
      <JsonLd data={schema} />
      <PublicBlogHeader active="tool" />
      <section className="bg-[radial-gradient(circle_at_78%_15%,rgba(177,209,255,0.3),transparent_30%),linear-gradient(180deg,#f8fbff_0%,#ffffff_100%)]">
        <div className="mx-auto w-full max-w-[1420px] px-4 pb-10 pt-12 sm:px-8 sm:pb-14 sm:pt-16 xl:px-10">
          <p className="text-[13px] font-semibold text-[#2f6df6]">FREE DNS CHECK</p>
          <h1 className="mt-3 max-w-[820px] text-balance text-[34px] font-semibold leading-[1.15] tracking-[-0.07em] text-[#16233c] sm:text-[48px]">
            도메인 메일 연결 상태를
            <br className="hidden sm:block" /> 지금 바로 확인하세요
          </h1>
          <p className="mt-5 max-w-[720px] text-[15px] leading-7 text-[#64748b] sm:text-[17px] sm:leading-8">
            MX·SPF·DKIM·DMARC를 공개 DNS에서 직접 조회합니다. 메일 수신이 안 되거나 Gmail에서 인증 실패로 반송될 때 먼저 확인할 수 있습니다.
          </p>
        </div>
      </section>
      <div className="mx-auto w-full max-w-[1420px] px-4 sm:px-8 xl:px-10">
        <AdsenseContentAd
          className="!my-6 sm:!my-8"
          format="horizontal"
          locale={locale}
          slot={getAdsenseSlot("domainCheck")}
        />
      </div>
      <DomainMailChecker initialDomain={initialDomain} initialResult={initialResult} />
      <SiteFooter className="pt-12" />
    </main>
    </ServerStaticUiLocalizer>
  );
}
