/* ============================================================
   Public blog — list + article
   ============================================================ */

function getPost(slug) {
  return BLOG_POSTS.find(p => p.slug === slug) || BLOG_POSTS.find(p => p.status === "published");
}

function PostCover({ src, label, style }) {
  if (src) return <img className="post-cover" src={src} alt={label || ""} loading="lazy"
                        style={{ width: "100%", objectFit: "cover", display: "block", ...style }} />;
  return <div className="imgph post-cover" style={style}>{label || t("blogui.coverPlaceholder")}</div>;
}

function PostMeta({ p }) {
  return (
    <div style={{ display: "flex", alignItems: "center", gap: 10, fontSize: 13, color: "var(--text-3)", flexWrap: "wrap" }}>
      <span style={{ fontWeight: 600, color: "var(--text-2)" }}>{p.author}</span>
      <span>·</span><span>{fmtDate(p.date)}</span>
      <span>·</span><span>{p.readMins} {t("blogui.readMins")}</span>
    </div>
  );
}

/* Google AdSense reklam alanı (placeholder). Ayarlardan açılır/kapanır.
   Geliştirici: data-ad-client + data-ad-slot doldurup AdSense <ins> ile değiştirir. */
/* AdSlot artık ui.jsx'te global tanımlı (tüm sayfalarda kullanılır). */

/* ----------------------------- LIST ----------------------------- */
function BlogList() {
  const published = BLOG_POSTS.filter(p => p.status === "published");
  const cats = getCats().filter(c => published.some(p => p.category === c.name));
  const [page, setPage] = useState(1);
  const PER = 9;

  const featured = published[0];
  const pool = published.slice(1);
  const pageCount = Math.max(1, Math.ceil(pool.length / PER));
  const cur = Math.min(page, pageCount);
  const pageItems = pool.slice((cur - 1) * PER, cur * PER);

  return (
    <div>
      <section style={{ background: "linear-gradient(180deg, #fff, var(--bg))", borderBottom: "1px solid var(--border)" }}>
        <div className="wrap" style={{ padding: "56px 24px 44px", textAlign: "center" }}>
          <span className="eyebrow">{Ic.file({ s: 14 })} {t("nav.blog")}</span>
          <h1 style={{ fontSize: 40, letterSpacing: "-0.035em", margin: "16px 0 10px" }}>{t("blogui.heroTitle")}</h1>
          <p className="mut" style={{ fontSize: 17, maxWidth: 560, margin: "0 auto" }}>
            {t("blogui.heroSub")}
          </p>
        </div>
      </section>

      <div className="wrap" style={{ padding: "36px 24px 100px" }}>
        {/* öne çıkan (yalnız 1. sayfa) */}
        {cur === 1 && featured && (
          <a href={articleUrl(featured.slug)} className="card blog-feature" style={{ overflow: "hidden", marginBottom: 32, textDecoration: "none" }}>
            <PostCover src={featured.cover} label={t("blogui.featuredCover")} style={{ borderRadius: 0, border: "none", borderRight: "1px solid var(--border)", minHeight: 240, height: "100%" }} />
            <div style={{ padding: "28px 30px", display: "flex", flexDirection: "column", gap: 12, justifyContent: "center" }}>
              <div><Badge tone="blue" dot={false}>{featured.category}</Badge></div>
              <h2 style={{ fontSize: 25, letterSpacing: "-0.025em", margin: 0, lineHeight: 1.25 }}>{featured.title}</h2>
              <p className="mut" style={{ margin: 0, fontSize: 15.5, lineHeight: 1.6 }}>{featured.excerpt}</p>
              <PostMeta p={featured} />
            </div>
          </a>
        )}

        {/* kategori çipleri — ayrı SEO sayfalarına LINK (crawlable; her dil kendi slug'ı: /blog/{localized}) */}
        <div style={{ display: "flex", gap: 8, marginBottom: 22, flexWrap: "wrap" }}>
          <a className="nav-link active" style={{ border: "1px solid transparent" }} href={PAGES.blog}>{t("blogui.all")}</a>
          {cats.map(c => (
            <a key={c.slug} className="nav-link" style={{ border: "1px solid var(--border-2)" }} href={categoryUrl(c.slug)}>{c.name}</a>
          ))}
        </div>

        {/* reklam — liste üstü */}
        <div style={{ margin: "0 0 26px" }}><AdSlot format="leaderboard" label={t("blogui.adLabel")} /></div>

        <div className="grid grid-3" style={{ gap: 22 }}>
          {pageItems.map(p => (
            <a key={p.id} href={articleUrl(p.slug)} className="post-card" style={{ textDecoration: "none" }}>
              <PostCover src={p.cover} />
              <div className="post-body">
                <div><Badge tone="gray" dot={false}>{p.category}</Badge></div>
                <div className="post-title">{p.title}</div>
                <p className="mut" style={{ margin: 0, fontSize: 14.5, lineHeight: 1.55, flex: 1 }}>{p.excerpt}</p>
                <PostMeta p={p} />
              </div>
            </a>
          ))}
        </div>

        {/* pagination */}
        {pageCount > 1 && (
          <div style={{ display: "flex", gap: 6, justifyContent: "center", marginTop: 34, flexWrap: "wrap" }}>
            <span className="nav-link" style={{ cursor: cur <= 1 ? "default" : "pointer", opacity: cur <= 1 ? 0.4 : 1, border: "1px solid var(--border-2)" }} onClick={() => cur > 1 && setPage(cur - 1)}>‹</span>
            {Array.from({ length: pageCount }, (_, i) => i + 1).map(n => (
              <span key={n} className={"nav-link" + (n === cur ? " active" : "")} style={{ cursor: "pointer", minWidth: 38, textAlign: "center", border: "1px solid " + (n === cur ? "transparent" : "var(--border-2)") }} onClick={() => setPage(n)}>{n}</span>
            ))}
            <span className="nav-link" style={{ cursor: cur >= pageCount ? "default" : "pointer", opacity: cur >= pageCount ? 0.4 : 1, border: "1px solid var(--border-2)" }} onClick={() => cur < pageCount && setPage(cur + 1)}>›</span>
          </div>
        )}

        {/* reklam — liste altı */}
        <div style={{ margin: "34px 0 0" }}><AdSlot format="leaderboard" label={t("blogui.adLabel")} /></div>
      </div>
    </div>
  );
}

/* ----------------------------- CATEGORY ARCHIVE ----------------------------- */
function BlogCategory({ slug }) {
  const cat = catBySlug(slug);
  if (!cat) return <BlogList />;
  const posts = BLOG_POSTS.filter(p => p.status === "published" && p.category === cat.name);
  const others = getCats().filter(c => c.slug !== cat.slug);
  useEffect(() => { document.title = (cat.title || `${cat.name} — 90 Day Free SSL`); }, []);

  return (
    <div>
      <section style={{ background: "linear-gradient(180deg, #fff, var(--bg))", borderBottom: "1px solid var(--border)" }}>
        <div className="wrap" style={{ padding: "48px 24px 40px" }}>
          <div style={{ display: "flex", alignItems: "center", gap: 8, fontSize: 13.5, color: "var(--text-3)", marginBottom: 14 }}>
            <a href={PAGES.blog} className="mut">{t("nav.blog")}</a><span>/</span><span style={{ color: "var(--primary)", fontWeight: 600 }}>{cat.name}</span>
          </div>
          <span className="eyebrow">{Ic.layers({ s: 14 })} {t("blogui.category")}</span>
          <h1 style={{ fontSize: 38, letterSpacing: "-0.035em", margin: "14px 0 10px" }}>{cat.name}</h1>
          {cat.intro && <p className="mut" style={{ fontSize: 16.5, maxWidth: 620, margin: 0, lineHeight: 1.6 }}>{cat.intro}</p>}
          <div className="hint" style={{ marginTop: 12 }}>{posts.length} {t("blogui.postsWord")}</div>
        </div>
      </section>

      <div className="wrap" style={{ padding: "36px 24px 60px" }}>
        <div style={{ margin: "0 0 26px" }}><AdSlot format="leaderboard" label={t("blogui.adLabel")} /></div>
        {posts.length === 0
          ? <div className="card card-pad" style={{ textAlign: "center", color: "var(--text-3)" }}>{t("blogui.emptyCategory")}</div>
          : <div className="grid grid-3" style={{ gap: 22 }}>
              {posts.map(p => (
                <a key={p.id} href={articleUrl(p.slug)} className="post-card" style={{ textDecoration: "none" }}>
                  <PostCover src={p.cover} />
                  <div className="post-body">
                    <div><Badge tone="gray" dot={false}>{p.category}</Badge></div>
                    <div className="post-title">{p.title}</div>
                    <p className="mut" style={{ margin: 0, fontSize: 14.5, lineHeight: 1.55, flex: 1 }}>{p.excerpt}</p>
                    <PostMeta p={p} />
                  </div>
                </a>
              ))}
            </div>}
      </div>

      <section style={{ borderTop: "1px solid var(--border)", background: "var(--surface)" }}>
        <div className="wrap" style={{ padding: "34px 24px 60px" }}>
          <h2 style={{ fontSize: 18, letterSpacing: "-0.02em", margin: "0 0 16px" }}>{t("blogui.otherCategories")}</h2>
          <div style={{ display: "flex", gap: 8, flexWrap: "wrap" }}>
            <a className="nav-link" style={{ border: "1px solid var(--border-2)" }} href={PAGES.blog}>{t("blogui.all")}</a>
            {others.map(c => <a key={c.slug} className="nav-link" style={{ border: "1px solid var(--border-2)" }} href={categoryUrl(c.slug)}>{c.name}</a>)}
          </div>
        </div>
      </section>
    </div>
  );
}

/* ----------------------------- ARTICLE BODY ----------------------------- */
function CtaBox() {
  return (
    <div className="card card-pad" style={{ background: "var(--primary-soft)", border: "none", display: "flex", alignItems: "center", gap: 16, margin: "8px 0 26px", flexWrap: "wrap" }}>
      <span style={{ width: 44, height: 44, borderRadius: 12, background: "var(--primary)", color: "#fff", display: "grid", placeItems: "center", flex: "none" }}>{Ic.shield({ s: 22 })}</span>
      <div style={{ flex: "1 1 220px" }}>
        <div style={{ fontWeight: 700, color: "var(--primary-800)", fontSize: 16 }}>{t("blogui.ctaTitle")}</div>
        <div className="hint" style={{ color: "var(--primary-700)" }}>{t("blogui.ctaSub")}</div>
      </div>
      <Btn kind="primary" onClick={() => goView("wizard")} iconRight={Ic.arrow({ s: 16 })}>{t("blogui.ctaBtn")}</Btn>
    </div>
  );
}

function CpanelGuide() {
  return (
    <>
      <p>Sitenizi HTTPS'e taşımak için pahalı bir sertifika satın almanıza gerek yok. Bu rehberde, ücretsiz aldığınız SSL dosyalarını <strong>cPanel</strong>'in SSL/TLS yöneticisine adım adım nasıl yükleyeceğinizi göstereceğiz.</p>
      <h2>Başlamadan önce neye ihtiyacınız var?</h2>
      <p>İndirdiğiniz ZIP paketinin içinde üç dosya bulunur. cPanel kurulumu için bunların üçü de gereklidir:</p>
      <ul>
        <li><code>certificate.crt</code> — sunucu sertifikanız</li>
        <li><code>private.key</code> — özel anahtarınız (kimseyle paylaşmayın)</li>
        <li><code>ca_bundle.crt</code> — ara sertifika zinciri</li>
      </ul>
      <blockquote>İpucu: Dosyaları bir metin düzenleyiciyle açıp içeriğini kopyalayabilirsiniz. <code>-----BEGIN</code> ve <code>-----END</code> satırları dahil tüm içeriği almayı unutmayın.</blockquote>
      <h2>Adım adım kurulum</h2>
      <h3>1. SSL/TLS yöneticisini açın</h3>
      <p>cPanel ana ekranında <strong>Güvenlik → SSL/TLS</strong> bölümüne girin ve <em>"Sertifikaları Yönet (CRT)"</em> yerine <strong>"SSL Sitelerini Yönet"</strong> seçeneğine tıklayın.</p>
      <h3>2. Alan adınızı seçin</h3>
      <p>Açılan listeden sertifikayı kuracağınız alan adını seçin. Form otomatik olarak ilgili alanları doldurmaya çalışır.</p>
      <h3>3. Dosyaları yapıştırın</h3>
      <pre><span className="c"># Sertifika (CRT) alanına:</span>
certificate.crt içeriği

<span className="c"># Özel Anahtar (KEY) alanına:</span>
private.key içeriği

<span className="c"># Sertifika Yetkilisi Paketi (CABUNDLE) alanına:</span>
ca_bundle.crt içeriği</pre>
      <p>Her dosyanın içeriğini ilgili kutuya yapıştırdıktan sonra <strong>"Sertifikayı Yükle"</strong> butonuna basın.</p>
      <CtaBox />
      <h2>Kurulumu doğrulayın</h2>
      <p>Tarayıcınızda sitenizi <code>https://</code> ile açın ve adres çubuğunda kilit simgesini görüp görmediğinizi kontrol edin. Sertifikanın doğru kurulduğunu kesinleştirmek için bir SSL test aracı da kullanabilirsiniz.</p>
      <h3>"Karışık içerik" uyarısı alıyorsanız</h3>
      <p>Sayfanız HTTPS üzerinden açılsa bile, içindeki bazı görsel veya script'ler hâlâ <code>http://</code> ile çağrılıyorsa tarayıcı uyarı verir. Tema veya içerik ayarlarınızdan tüm bağlantıları <code>https://</code> olacak şekilde güncelleyin.</p>
      <h2>Yenilemeyi unutmayın</h2>
      <p>Ücretsiz sertifikalar 90 gün geçerlidir. Süre dolmadan yenilemek için aynı adımları tekrarlamanız yeterli. E-posta hatırlatmalarını açık tutarsanız, süre dolmadan sizi önceden uyarırız.</p>
    </>
  );
}

function GenericGuide({ post }) {
  return (
    <>
      <p>{post.excerpt}</p>
      <h2>Neden önemli?</h2>
      <p>HTTPS, ziyaretçilerinizle sunucunuz arasındaki trafiği şifreler; hem kullanıcı güvenini hem de arama motoru sıralamanızı olumlu etkiler. Bu rehberde konuyu pratik adımlarla ele alıyoruz.</p>
      <h2>Adımlar</h2>
      <ol>
        <li>Gerekli sertifika dosyalarını hazır bulundurun.</li>
        <li>Sunucu veya kontrol panelinizdeki SSL bölümüne girin.</li>
        <li>Sertifika, özel anahtar ve zincir dosyalarını tanımlayın.</li>
        <li>Servisi yeniden başlatın ve bağlantıyı doğrulayın.</li>
      </ol>
      <blockquote>Takıldığınız noktada, ilgili platform için ayrıntılı rehberlerimize blog ana sayfasından ulaşabilirsiniz.</blockquote>
      <CtaBox />
      <h2>Doğrulama</h2>
      <p>Kurulumdan sonra sitenizi <code>https://</code> ile açıp adres çubuğundaki kilit simgesini kontrol edin. Her şey yolundaysa siteniz artık güvenli bağlantı üzerinden yayında demektir.</p>
    </>
  );
}

/* ----------------------------- ARTICLE PAGE ----------------------------- */
function BlogArticle({ slug }) {
  // Gerçek (DB) makale sunucudan __BOOT__.post ile gelir (içerik + meta, slug'a göre tek-post).
  // Demo/mock modunda liste verisinden (getPost) beslenir, içerik yoksa guide gösterilir.
  const bootPost = (typeof window !== "undefined" && window.__BOOT__ && window.__BOOT__.post) || null;
  const post = bootPost ? {
    id: bootPost.id, status: bootPost.status, category: bootPost.category, title: bootPost.title,
    slug: bootPost.slug, author: bootPost.author || "", date: new Date(bootPost.date),
    readMins: bootPost.readMins || 0, tags: bootPost.tags || [], excerpt: bootPost.excerpt || "",
    cover: bootPost.cover || "",
  } : getPost(slug);
  const html = bootPost ? bootPost.content : null;
  const related = BLOG_POSTS.filter(p => p.status === "published" && p.id !== post.id).slice(0, 3);

  return (
    <div>
      <div className="wrap" style={{ maxWidth: 820, padding: "40px 24px 20px" }}>
        <div style={{ display: "flex", alignItems: "center", gap: 8, fontSize: 13.5, color: "var(--text-3)", marginBottom: 18 }}>
          <a href={PAGES.blog} className="mut">{t("nav.blog")}</a><span>/</span>
          {catByName(post.category)
            ? <a href={categoryUrl(catByName(post.category).slug)} style={{ color: "var(--primary)", fontWeight: 600, textDecoration: "none" }}>{post.category}</a>
            : <span style={{ color: "var(--primary)", fontWeight: 600 }}>{post.category}</span>}
        </div>
        <h1 style={{ fontSize: 38, letterSpacing: "-0.035em", lineHeight: 1.15, margin: "0 0 16px" }}>{post.title}</h1>
        <div style={{ display: "flex", alignItems: "center", gap: 12, flexWrap: "wrap" }}>
          <span style={{ width: 42, height: 42, borderRadius: "50%", background: "var(--primary-soft)", color: "var(--primary)", display: "grid", placeItems: "center" }}>{Ic.user({ s: 19 })}</span>
          <div>
            <div style={{ fontWeight: 600, fontSize: 14.5 }}>{post.author}</div>
            <div className="hint">{fmtDateLong(post.date)} · {post.readMins} {t("blogui.readMins")}</div>
          </div>
        </div>
      </div>

      <div className="wrap" style={{ maxWidth: 820, padding: "8px 24px 0" }}>
        <PostCover src={post.cover} label={t("blogui.articleCover")} style={{ aspectRatio: "21/9", marginBottom: 30, borderRadius: 14 }} />
        <div style={{ marginBottom: 30 }}><AdSlot format="leaderboard" label={t("blogui.adLabel")} /></div>
      </div>

      <div className="wrap" style={{ padding: "0 24px 70px" }}>
        <article className="article">
          {html
            ? <div dangerouslySetInnerHTML={{ __html: html }} />
            : (post.slug === "cpanel-ucretsiz-ssl-kurulumu" ? <CpanelGuide /> : <GenericGuide post={post} />)}
          <hr className="divider" style={{ margin: "32px 0" }} />
          <div style={{ display: "flex", gap: 8, flexWrap: "wrap" }}>
            {post.tags.map(t => <span key={t} className="badge badge-gray" style={{ padding: "5px 12px" }}>#{t}</span>)}
          </div>
          <div style={{ margin: "30px 0 0" }}><AdSlot format="rectangle" label={t("blogui.adLabel")} /></div>
        </article>
      </div>

      <section style={{ borderTop: "1px solid var(--border)", background: "var(--surface)" }}>
        <div className="wrap" style={{ padding: "44px 24px 70px" }}>
          <h2 style={{ fontSize: 22, letterSpacing: "-0.02em", margin: "0 0 22px" }}>{t("blogui.related")}</h2>
          <div className="grid grid-3" style={{ gap: 22 }}>
            {related.map(p => (
              <a key={p.id} href={articleUrl(p.slug)} className="post-card" style={{ textDecoration: "none" }}>
                <PostCover src={p.cover} />
                <div className="post-body">
                  <div><Badge tone="gray" dot={false}>{p.category}</Badge></div>
                  <div className="post-title" style={{ fontSize: 16.5 }}>{p.title}</div>
                  <PostMeta p={p} />
                </div>
              </a>
            ))}
          </div>
        </div>
      </section>
    </div>
  );
}

Object.assign(window, { BlogList, BlogArticle, BlogCategory, AdSlot, getPost });
