// blog-catalog.jsx — Supabase'den blog yazılarını çekme + statik içeriğe
// (migration henüz çalıştırılmamışsa) zarif geri düşüş (fallback).

function mapBlogRow(row, lang) {
  const translations = row.blog_post_translations || [];
  const t = translations.find((x) => x.lang === lang) || translations[0] || {};
  return {
    id: row.id,
    slug: row.slug,
    date: row.published_at,
    tone: row.tone,
    imagePath: row.image_path || null,
    title: t.title || row.slug,
    excerpt: t.excerpt || "",
    readMinutes: t.read_minutes || 4,
    blocks: t.blocks || [],
  };
}

// blog.jsx'teki statik BLOG_POSTS dizisinin (nested tr/en) aynı düz şekle
// dönüştürülmüş hali — Supabase migration'ları henüz çalıştırılmadıysa veya
// sorgu başarısız olursa blog sayfası boş kalmasın diye kullanılır.
function staticFallbackBlog(lang) {
  return (window.BLOG_POSTS || []).map((post) => {
    const b = post[lang] || post.tr;
    return {
      id: post.slug,
      slug: post.slug,
      date: post.date,
      tone: post.tone,
      imagePath: null,
      title: b.title,
      excerpt: b.excerpt,
      readMinutes: b.readMinutes,
      blocks: b.blocks,
    };
  });
}

let rawBlogPromise = null;
function loadRawBlog() {
  try {
    return window.sb
      .from("blog_posts")
      .select("*, blog_post_translations(*)")
      .eq("active", true)
      .order("published_at", { ascending: false })
      .then(({ data, error }) => {
        if (error || !data || !data.length) throw error || new Error("empty blog");
        return data;
      });
  } catch (err) {
    return Promise.resolve(null);
  }
}

function fetchBlogPosts(lang) {
  if (!rawBlogPromise) {
    rawBlogPromise = loadRawBlog().catch((err) => {
      console.warn("Elfinrose: Supabase blog verisi alınamadı, statik içerik gösteriliyor.", err);
      return null;
    });
  }
  return rawBlogPromise.then((rows) => (rows ? rows.map((r) => mapBlogRow(r, lang)) : staticFallbackBlog(lang)));
}

function blogPhotoUrl(imagePath) {
  if (!imagePath || !window.sb) return null;
  return window.sb.storage.from("blog-photos").getPublicUrl(imagePath).data.publicUrl;
}

Object.assign(window, { fetchBlogPosts, blogPhotoUrl });
