import Link from "next/link";
import SiteHeader from "@/components/layout/SiteHeader";
import { LANDING_ACTION_PATHS, type LandingCMS } from "@/lib/cms/landing";
import type { PublicEvent } from "@/lib/events/public";
import { homeContent, type PublicCopy } from "@/content/home";
import { InlineText } from "@/components/cms/LandingInlineEditor";
import LandingSectionCanvas from "@/components/cms/LandingSectionCanvas";
import type { LandingPageSection } from "@/lib/cms/landing-section-schema";

const trackDetails = {
  key: {
    number: "01",
    icon: "📖",
    tone: "learn",
  },
  event: {
    number: "02",
    icon: "☕",
    tone: "connect",
  },
  volunteer: {
    number: "03",
    icon: "🤝",
    tone: "contribute",
  },
} as const;

const trackLabelFields: Record<"key" | "event" | "volunteer", keyof PublicCopy> = {
  key: "keyTrackLabel",
  event: "eventTrackLabel",
  volunteer: "volunteerTrackLabel",
};

function formatDate(value: string | null) {
  if (!value) return "Jadwal menyusul";

  return new Intl.DateTimeFormat("id-ID", {
    day: "numeric",
    month: "long",
    year: "numeric",
    timeZone: "UTC",
  }).format(new Date(`${value.slice(0, 10)}T00:00:00Z`));
}

function eventMode(mode: PublicEvent["mode"]) {
  if (mode === "online") return "Online";
  if (mode === "hybrid") return "Hybrid";
  return "Offline";
}

export default function CommunityHome({
  landing,
  events,
  sections,
}: {
  landing: LandingCMS;
  events: PublicEvent[];
  sections: LandingPageSection[];
}) {
  const actions = homeContent.actions
    .map((fallback) => {
      const action = landing.actions.find(
        (item) => item.actionKey === fallback.id,
      );

      return {
        ...fallback,
        title: action?.title || fallback.title,
        description: action?.description || fallback.description,
        cta: action?.cta || fallback.cta,
        href: action?.href || LANDING_ACTION_PATHS[fallback.id],
        mediaUrl: action?.mediaUrl ?? null,
        active: action?.active ?? true,
      };
    })
    .filter((action) => action.active);
  return (
    <div className="community-home">
      <style>{`
        .community-home {
          --home-bg: #06090e;
          --home-surface: #0d131d;
          --home-card: #121a27;
          --home-border: #1c283a;
          --home-ink: #f1f5f9;
          --home-muted: #a6b2c1;
          --home-cyan: #38bdf8;
          --home-lime: #a3e635;
          --home-amber: #fbbf24;
          min-height: 100vh;
          overflow: hidden;
          background-color: var(--home-bg);
          background-image: radial-gradient(rgba(255,255,255,.035) 1px, transparent 1px);
          background-size: 32px 32px;
          color: var(--home-ink);
          font-family: "DM Sans", "Segoe UI", sans-serif;
        }
        .community-home * { box-sizing: border-box; }
        .community-home .site-header {
          position: sticky;
          top: 0;
          background: rgba(6,9,14,.9);
          border-color: rgba(255,255,255,.1);
          backdrop-filter: blur(16px);
          -webkit-backdrop-filter: blur(16px);
        }
        .community-home .site-logo { color: var(--home-ink); }
        .community-home .site-nav a { color: #cbd5e1; }
        .community-home .site-nav a:hover { color: white; }
        .community-home .site-nav .nav-cta {
          border: 1px solid rgba(56,189,248,.35);
          background: rgba(56,189,248,.12);
          color: var(--home-cyan);
        }
        .community-home .mobile-menu-toggle {
          border-color: var(--home-border);
          background: var(--home-card);
          color: white;
        }
        .home-wrap { width: min(1120px, calc(100% - 40px)); margin: 0 auto; }
        .home-eyebrow {
          display: inline-flex;
          align-items: center;
          gap: 9px;
          color: var(--home-cyan);
          font: 700 11px/1.5 "JetBrains Mono", Consolas, monospace;
          letter-spacing: .12em;
          text-transform: uppercase;
        }
        .home-eyebrow::before {
          width: 7px;
          height: 7px;
          border-radius: 50%;
          background: currentColor;
          content: "";
          box-shadow: 0 0 14px currentColor;
        }
        .home-hero {
          position: relative;
          isolation: isolate;
          padding: clamp(76px, 11vw, 140px) 0 86px;
          border-bottom: 1px solid rgba(255,255,255,.08);
        }
        .home-hero::before, .home-hero::after {
          position: absolute;
          z-index: -1;
          width: min(48vw, 560px);
          aspect-ratio: 1;
          border-radius: 50%;
          content: "";
          filter: blur(100px);
          opacity: .23;
          pointer-events: none;
        }
        .home-hero::before { top: -42%; left: -18%; background: #087ba8; }
        .home-hero::after { right: -16%; bottom: -48%; background: #7b4a03; opacity: .15; }
        .home-hero-inner { position: relative; max-width: 900px; margin: auto; text-align: center; }
        .home-hero h1 {
          max-width: 900px;
          margin: 23px auto 0;
          color: white;
          font: 700 clamp(42px, 7.4vw, 82px)/1.05 "Space Grotesk", "Segoe UI", sans-serif;
          letter-spacing: -.065em;
        }
        .home-hero h1 span {
          color: transparent;
          background: linear-gradient(95deg, var(--home-cyan), #818cf8 54%, var(--home-lime));
          background-clip: text;
          -webkit-background-clip: text;
        }
        .home-hero-copy {
          max-width: 680px;
          margin: 23px auto 0;
          color: #c1ccd7;
          font-size: clamp(15px, 2vw, 18px);
          line-height: 1.8;
        }
        .home-hero-actions {
          display: flex;
          flex-wrap: wrap;
          justify-content: center;
          gap: 12px;
          margin-top: 30px;
        }
        .home-button {
          display: inline-flex;
          min-height: 48px;
          align-items: center;
          justify-content: center;
          gap: 10px;
          padding: 12px 19px;
          border: 1px solid var(--home-border);
          border-radius: 12px;
          background: var(--home-surface);
          color: white;
          font-size: 13px;
          font-weight: 700;
          transition: transform .18s ease, border-color .18s ease, background .18s ease;
        }
        .home-button:hover { transform: translateY(-2px); border-color: var(--home-cyan); }
        .home-button-primary {
          border-color: transparent;
          background: linear-gradient(100deg, var(--home-cyan), #60a5fa);
          color: #07111b;
        }
        .home-button-primary:hover { background: linear-gradient(100deg, #7dd3fc, #93c5fd); }
        .home-tracks { padding: 76px 0 88px; }
        .home-section-heading { max-width: 650px; margin: 0 auto 38px; text-align: center; }
        .home-section-heading h2 {
          margin: 12px 0 0;
          color: white;
          font: 700 clamp(30px, 4.4vw, 46px)/1.12 "Space Grotesk", "Segoe UI", sans-serif;
          letter-spacing: -.045em;
        }
        .home-section-heading p { margin: 12px 0 0; color: var(--home-muted); font-size: 14px; line-height: 1.8; }
        .home-track-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; }
        .home-track {
          display: flex;
          min-width: 0;
          min-height: 320px;
          flex-direction: column;
          justify-content: space-between;
          padding: 25px;
          overflow: hidden;
          border: 1px solid var(--home-border);
          border-radius: 22px;
          background: linear-gradient(160deg, rgba(18,26,39,.98), rgba(13,19,29,.98));
          box-shadow: 0 18px 42px rgba(0,0,0,.18);
          transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease;
        }
        .home-track:hover { transform: translateY(-4px); box-shadow: 0 24px 48px rgba(0,0,0,.28); }
        .home-track-learn:hover { border-color: rgba(56,189,248,.65); }
        .home-track-connect:hover { border-color: rgba(251,191,36,.65); }
        .home-track-contribute:hover { border-color: rgba(163,230,53,.6); }
        .home-track-top { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
        .home-track-icon {
          display: grid;
          width: 48px;
          height: 48px;
          place-items: center;
          border: 1px solid var(--home-border);
          border-radius: 15px;
          background: var(--home-bg);
          font-size: 22px;
        }
        .home-track-art {
          height: 105px;
          margin-bottom: 18px;
          border: 1px solid var(--home-border);
          border-radius: 14px;
          background-color: rgba(56,189,248,.08);
          background-position: center;
          background-size: cover;
        }
        .home-track-learn .home-track-art { background-color: rgba(56,189,248,.1); }
        .home-track-connect .home-track-art { background-color: rgba(251,191,36,.09); }
        .home-track-contribute .home-track-art { background-color: rgba(163,230,53,.08); }
        .home-track-number { color: #718096; font: 600 11px "JetBrains Mono", Consolas, monospace; }
        .home-track-label {
          display: inline-block;
          margin-top: 25px;
          color: var(--home-track-accent);
          font: 600 10px/1.6 "JetBrains Mono", Consolas, monospace;
          letter-spacing: .06em;
        }
        .home-track h3 {
          margin: 10px 0 0;
          color: white;
          font: 700 23px/1.2 "Space Grotesk", "Segoe UI", sans-serif;
          letter-spacing: -.035em;
        }
        .home-track p { margin: 12px 0 25px; color: var(--home-muted); font-size: 13px; line-height: 1.8; }
        .home-track-cta {
          display: flex;
          align-items: center;
          justify-content: space-between;
          gap: 14px;
          padding-top: 16px;
          border-top: 1px solid var(--home-border);
          color: white;
          font: 600 11px "JetBrains Mono", Consolas, monospace;
        }
        .home-track-cta span:last-child { color: var(--home-track-accent); font-size: 18px; transition: transform .18s ease; }
        .home-track:hover .home-track-cta span:last-child { transform: translateX(4px); }
        .home-track-learn { --home-track-accent: var(--home-cyan); }
        .home-track-connect { --home-track-accent: var(--home-amber); }
        .home-track-contribute { --home-track-accent: var(--home-lime); }
        .home-agenda {
          padding: 72px 0 80px;
          border-top: 1px solid rgba(255,255,255,.08);
          border-bottom: 1px solid rgba(255,255,255,.08);
          background: rgba(13,19,29,.82);
        }
        .home-agenda-head {
          display: flex;
          align-items: flex-end;
          justify-content: space-between;
          gap: 24px;
          margin-bottom: 27px;
        }
        .home-agenda-head h2 {
          margin: 10px 0 0;
          color: white;
          font: 700 clamp(28px, 4vw, 40px)/1.12 "Space Grotesk", "Segoe UI", sans-serif;
          letter-spacing: -.045em;
        }
        .home-agenda-head p { margin-top: 10px; color: var(--home-muted); font-size: 13px; }
        .home-agenda-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 15px; }
        .home-event {
          display: flex;
          min-width: 0;
          min-height: 245px;
          flex-direction: column;
          padding: 21px;
          border: 1px solid var(--home-border);
          border-radius: 16px;
          background: var(--home-card);
          transition: border-color .18s ease, transform .18s ease;
        }
        .home-event:hover { transform: translateY(-3px); border-color: rgba(56,189,248,.55); }
        .home-event-type { color: var(--home-cyan); font: 600 10px "JetBrains Mono", Consolas, monospace; letter-spacing: .1em; text-transform: uppercase; }
        .home-event h3 { margin: 14px 0 10px; color: white; font: 700 19px/1.3 "Space Grotesk", "Segoe UI", sans-serif; letter-spacing: -.025em; }
        .home-event p { color: var(--home-muted); font-size: 12px; line-height: 1.7; }
        .home-event-meta { display: flex; flex-wrap: wrap; gap: 7px; margin-top: auto; padding-top: 20px; }
        .home-event-meta span { padding: 6px 8px; border: 1px solid var(--home-border); border-radius: 7px; color: #cbd5e1; font-size: 10px; }
        .home-event-cta { display: flex; justify-content: space-between; gap: 10px; margin-top: 15px; padding-top: 13px; border-top: 1px solid var(--home-border); color: white; font-size: 12px; font-weight: 700; }
        .home-event-cta span:last-child { color: var(--home-cyan); }
        .home-empty { padding: 26px; border: 1px dashed #334155; border-radius: 16px; color: #cbd5e1; }
        .home-empty p { margin-top: 8px; color: var(--home-muted); font-size: 13px; line-height: 1.7; }
        .home-final { padding: 70px 0; }
        .home-final-inner {
          display: flex;
          align-items: center;
          justify-content: space-between;
          gap: 28px;
          padding: clamp(25px, 5vw, 48px);
          border: 1px solid rgba(56,189,248,.24);
          border-radius: 22px;
          background: radial-gradient(ellipse at 90% 0, rgba(56,189,248,.12), transparent 45%), var(--home-surface);
        }
        .home-final h2 { margin-top: 10px; color: white; font: 700 clamp(26px, 4vw, 38px)/1.16 "Space Grotesk", "Segoe UI", sans-serif; letter-spacing: -.04em; }
        .home-final p { max-width: 570px; margin-top: 10px; color: var(--home-muted); font-size: 13px; line-height: 1.8; }
        .community-home .site-footer { background: #04070b; border-top: 1px solid rgba(255,255,255,.1); }
        .community-home .footer-brand p { color: #9aa8b8; }
        .community-home .footer-links a { color: #cbd5e1; }
        .community-home .footer-links a:hover { color: var(--home-cyan); }
        .community-home .footer-bottom { color: #8492a3; }
        .community-home :is(a, button):focus-visible { outline: 3px solid var(--home-amber); outline-offset: 4px; }
        @media (max-width: 800px) {
          .home-track-grid, .home-agenda-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
          .home-track:last-child { grid-column: 1 / -1; }
          .home-final-inner { align-items: flex-start; flex-direction: column; }
        }
        @media (max-width: 600px) {
          .home-wrap { width: calc(100% - 28px); }
          .home-hero { padding: 74px 0 66px; }
          .home-hero h1 { letter-spacing: -.05em; }
          .home-hero-actions { align-items: stretch; flex-direction: column; }
          .home-button { width: 100%; }
          .home-tracks { padding: 58px 0 65px; }
          .home-section-heading { margin-bottom: 27px; text-align: left; }
          .home-track-grid, .home-agenda-grid { grid-template-columns: 1fr; }
          .home-track, .home-track:last-child { grid-column: auto; min-height: 285px; }
          .home-agenda { padding: 58px 0; }
          .home-agenda-head { align-items: flex-start; flex-direction: column; }
          .home-event { min-height: 220px; }
          .home-final { padding: 55px 0; }
          .community-home .site-footer-inner { padding: 42px 0; }
        }
        @media (prefers-reduced-motion: reduce) {
          .community-home *, .community-home *::before, .community-home *::after {
            scroll-behavior: auto !important;
            transition-duration: .01ms !important;
          }
        }
      `}</style>

      <SiteHeader />

      <main>
        <section className="home-hero">
          <div className="home-wrap home-hero-inner">
            <InlineText as="span" className="home-eyebrow" path="hero.eyebrow" value={landing.hero.eyebrow} />
            <InlineText as="h1" className="home-hero-title" path="hero.title" value={landing.hero.title} heroTitle />
            <p className="home-hero-copy">
              <InlineText as="span" path="hero.description" value={landing.hero.description} />
            </p>
            <div className="home-hero-actions">
              <Link className="home-button home-button-primary" href={landing.publicCopy.heroPrimaryHref}>
                <InlineText path="publicCopy.heroPrimaryCta" value={landing.publicCopy.heroPrimaryCta} /> <span aria-hidden="true">↗</span>
              </Link>
              <Link className="home-button" href={landing.publicCopy.heroSecondaryHref}>
                <InlineText path="publicCopy.heroSecondaryCta" value={landing.publicCopy.heroSecondaryCta} /> <span aria-hidden="true">→</span>
              </Link>
            </div>
          </div>
        </section>

        <section className="home-tracks" id="tracks">
          <div className="home-wrap">
            <div className="home-section-heading">
              <InlineText as="span" className="home-eyebrow" path="publicCopy.tracksEyebrow" value={landing.publicCopy.tracksEyebrow} />
              <InlineText as="h2" path="publicCopy.tracksTitle" value={landing.publicCopy.tracksTitle} />
              <p><InlineText path="publicCopy.tracksDescription" value={landing.publicCopy.tracksDescription} /></p>
            </div>

            <div className="home-track-grid">
              {actions.map((action) => {
                const track = trackDetails[action.id];
                const trackLabelField = trackLabelFields[action.id];
                const cmsAction = landing.actions.find((item) => item.actionKey === action.id);

                return (
                  <article
                    className={`home-track home-track-${track.tone}`}
                    key={action.id}
                  >
                    <div>
                      <div className="home-track-top">
                        <span className="home-track-icon" aria-hidden="true">
                          {action.mediaUrl ? "" : track.icon}
                        </span>
                        <span className="home-track-number">
                          {track.number} / 03
                        </span>
                      </div>
                      {action.mediaUrl && (
                        <div
                          className="home-track-art"
                          aria-hidden="true"
                          style={{
                            backgroundImage: `linear-gradient(rgba(6,9,14,.12), rgba(6,9,14,.28)), url("${action.mediaUrl}")`,
                          }}
                        />
                      )}
                      <InlineText as="span" className="home-track-label" path={`publicCopy.${trackLabelField}`} value={landing.publicCopy[trackLabelField]} />
                      {cmsAction ? (
                        <InlineText as="h3" path={`actions.${cmsAction.id}.title`} value={action.title} />
                      ) : (
                        <h3>{action.title}</h3>
                      )}
                      <p>
                        {cmsAction ? (
                          <InlineText path={`actions.${cmsAction.id}.description`} value={action.description} />
                        ) : action.description}
                      </p>
                    </div>
                    <Link className="home-track-cta" href={action.href}>
                      {cmsAction ? (
                        <InlineText path={`actions.${cmsAction.id}.cta`} value={action.cta} />
                      ) : action.cta}
                      <span aria-hidden="true">→</span>
                    </Link>
                  </article>
                );
              })}
            </div>
          </div>
        </section>

        <section className="home-agenda" id="sessions">
          <div className="home-wrap">
            <div className="home-agenda-head">
              <div>
                <InlineText as="span" className="home-eyebrow" path="publicCopy.agendaEyebrow" value={landing.publicCopy.agendaEyebrow} />
                <InlineText as="h2" path="publicCopy.agendaTitle" value={landing.publicCopy.agendaTitle} />
                <p><InlineText path="publicCopy.agendaDescription" value={landing.publicCopy.agendaDescription} /></p>
              </div>
              <Link className="home-button" href={landing.publicCopy.agendaHref}>
                <InlineText path="publicCopy.agendaLink" value={landing.publicCopy.agendaLink} /> <span aria-hidden="true">↗</span>
              </Link>
            </div>

            {events.length > 0 ? (
              <div className="home-agenda-grid">
                {events.map((event) => (
                  <article className="home-event" key={event.id}>
                    <span className="home-event-type">
                      {event.type || <InlineText path="publicCopy.eventTypeFallback" value={landing.publicCopy.eventTypeFallback} />}
                    </span>
                    <h3>{event.title}</h3>
                    <p>
                      {event.description?.replace(/<[^>]*>/g, " ").replace(/\s+/g, " ").trim().slice(0, 130)
                        || <InlineText path="publicCopy.eventDescriptionFallback" value={landing.publicCopy.eventDescriptionFallback} />}
                      {event.description && event.description.length > 130 ? "…" : ""}
                    </p>
                    <div className="home-event-meta">
                      <span>{formatDate(event.date)}</span>
                      <span>{eventMode(event.mode)}</span>
                      {event.location && <span>{event.location}</span>}
                    </div>
                    <Link
                      className="home-event-cta"
                      href={`/kegiatan/${event.slug}`}
                    >
                      <InlineText path="publicCopy.eventDetailLink" value={landing.publicCopy.eventDetailLink} />
                      <span aria-hidden="true">↗</span>
                    </Link>
                  </article>
                ))}
              </div>
            ) : (
              <div className="home-empty">
                <strong><InlineText path="publicCopy.agendaEmptyTitle" value={landing.publicCopy.agendaEmptyTitle} /></strong>
                <p><InlineText path="publicCopy.agendaEmptyDescription" value={landing.publicCopy.agendaEmptyDescription} /></p>
              </div>
            )}
          </div>
        </section>

        <section className="home-final">
          <div className="home-wrap home-final-inner">
            <div>
              <InlineText as="span" className="home-eyebrow" path="publicCopy.finalEyebrow" value={landing.publicCopy.finalEyebrow} />
              <InlineText as="h2" path="publicCopy.finalTitle" value={landing.publicCopy.finalTitle} />
              <p><InlineText path="publicCopy.finalDescription" value={landing.publicCopy.finalDescription} /></p>
            </div>
            <Link className="home-button home-button-primary" href={landing.publicCopy.finalCtaHref}>
              <InlineText path="publicCopy.finalCta" value={landing.publicCopy.finalCta} /> <span aria-hidden="true">↗</span>
            </Link>
          </div>
        </section>
        <LandingSectionCanvas pageType="home" pageKey="home" initialSections={sections} />
      </main>

      <footer className="site-footer">
        <div className="site-footer-inner">
          <div className="footer-brand">
            <h2>YukNgaji BSD.</h2>
            <p>
              <InlineText path="publicCopy.footerTagline" value={landing.publicCopy.footerTagline} />
              <br />
              <InlineText path="publicCopy.footerDescription" value={landing.publicCopy.footerDescription} />
            </p>
          </div>
          <nav className="footer-links" aria-label="Navigasi footer">
            <Link href={landing.publicCopy.footerKeyHref}><InlineText path="publicCopy.footerKeyLink" value={landing.publicCopy.footerKeyLink} /></Link>
            <Link href={landing.publicCopy.footerEventHref}><InlineText path="publicCopy.footerEventLink" value={landing.publicCopy.footerEventLink} /></Link>
            <Link href={landing.publicCopy.footerVolunteerHref}><InlineText path="publicCopy.footerVolunteerLink" value={landing.publicCopy.footerVolunteerLink} /></Link>
            <Link href={landing.publicCopy.footerBlogHref}><InlineText path="publicCopy.footerBlogLink" value={landing.publicCopy.footerBlogLink} /></Link>
            <Link href={landing.publicCopy.footerLoginHref}><InlineText path="publicCopy.footerLoginLink" value={landing.publicCopy.footerLoginLink} /></Link>
          </nav>
        </div>
        <div className="footer-bottom"><InlineText path="publicCopy.copyright" value={landing.publicCopy.copyright} /></div>
      </footer>
    </div>
  );
}
