// Datos compartidos del blog + componente BlogCover (gradient cover réutilisable)
// Expuesto en window.BLOG_ARTICLES, window.BLOG_CATEGORIES, window.BlogCover.

const BLOG_CATEGORIES = [
  { id: 'todos',          label: 'Todos' },
  { id: 'crm',            label: 'CRM' },
  { id: 'automatizacion', label: 'Automatización' },
  { id: 'productividad',  label: 'Productividad' },
  { id: 'marketing',      label: 'Marketing' },
  { id: 'estrategia',     label: 'Estrategia' },
];

// Article pillar : versions distinctes par pays (titre, slug, excerpt adaptés au marché)
const PILLAR_MX = {
  slug: 'mejor-crm-inmobiliario-mexico-2026',
  title: 'Cómo elegir el mejor CRM inmobiliario en México (2026)',
  titleAccent: 'guía completa',
  excerpt: 'Una guía completa para fundadores y directores de agencias inmobiliarias mexicanas que buscan estructurar su operación con un CRM moderno: criterios de elección, funcionalidades clave y errores a evitar.',
  category: 'crm',
  categoryLabel: 'CRM',
  date: '2026-04-15',
  dateLabel: '15 de abril de 2026',
  author: 'Equipo CloserBroker',
  readTime: '12 min de lectura',
  coverEyebrow: 'Guía completa',
  coverVariant: 'a',
  featured: true,
};

const PILLAR_CO = {
  slug: 'mejor-crm-inmobiliario-colombia-2026',
  title: 'Cómo elegir el mejor CRM inmobiliario en Colombia (2026)',
  titleAccent: 'guía completa',
  excerpt: 'Una guía completa para fundadores y directores de agencias inmobiliarias colombianas que buscan estructurar su operación con un CRM moderno: criterios de elección, funcionalidades clave y errores a evitar.',
  category: 'crm',
  categoryLabel: 'CRM',
  date: '2026-04-15',
  dateLabel: '15 de abril de 2026',
  author: 'Equipo CloserBroker',
  readTime: '12 min de lectura',
  coverEyebrow: 'Guía completa',
  coverVariant: 'a',
  featured: true,
};

// Articles communs : mêmes slug/title/excerpt pour les 2 pays (le contenu Markdown est adapté
// au pays via le fichier article.md séparé sous /<country>/blog/<slug>/article.md).
const COMMON_ARTICLES = [
  {
    slug: 'closerbroker-vs-wasi',
    title: 'CloserBroker vs Wasi: ¿cuál CRM inmobiliario elegir en 2026?',
    titleAccent: 'comparativa honesta',
    excerpt: 'Comparación factual entre CloserBroker y Wasi: precios reales, funcionalidades, automatización IA, integración con portales y para qué tipo de agencia es cada uno.',
    category: 'crm',
    categoryLabel: 'CRM',
    date: '2026-05-26',
    dateLabel: '26 de mayo de 2026',
    updatedDate: '2026-05-26',
    updatedDateLabel: '26 de mayo de 2026',
    author: 'Louis Thoumazeau',
    authorUrl: 'https://www.linkedin.com/in/louis-thoumazeau/',
    authorBio: 'Co-fundador de CloserBroker. Trabaja con agencias inmobiliarias en Colombia y México desde hace más de 5 años.',
    readTime: '11 min de lectura',
    coverEyebrow: 'Comparativa',
    coverVariant: 'c',
  },
  {
    slug: 'closerbroker-vs-easybroker',
    title: 'CloserBroker vs EasyBroker: comparativa honesta para 2026',
    titleAccent: 'sin marketing',
    excerpt: 'Comparación factual entre CloserBroker y EasyBroker: precios actualizados, IA, automatizaciones, portales conectados y cuál te conviene según el tamaño y tipo de tu agencia.',
    category: 'crm',
    categoryLabel: 'CRM',
    date: '2026-05-25',
    dateLabel: '25 de mayo de 2026',
    updatedDate: '2026-05-25',
    updatedDateLabel: '25 de mayo de 2026',
    author: 'Louis Thoumazeau',
    authorUrl: 'https://www.linkedin.com/in/louis-thoumazeau/',
    authorBio: 'Co-fundador de CloserBroker. Trabaja con agencias inmobiliarias en Colombia y México desde hace más de 5 años.',
    readTime: '11 min de lectura',
    coverEyebrow: 'Comparativa',
    coverVariant: 'b',
  },
  {
    slug: 'captacion-leads-inmobiliarios-guia',
    title: 'Captación de leads inmobiliarios: la guía definitiva para LATAM (2026)',
    titleAccent: 'guía completa',
    excerpt: '10 canales que funcionan, cómo calificar prospectos, embudo en 5 etapas, métricas clave y automatización. Guía completa para agencias en Colombia y México.',
    category: 'marketing',
    categoryLabel: 'Marketing',
    date: '2026-05-22',
    dateLabel: '22 de mayo de 2026',
    updatedDate: '2026-05-22',
    updatedDateLabel: '22 de mayo de 2026',
    author: 'Louis Thoumazeau',
    authorUrl: 'https://www.linkedin.com/in/louis-thoumazeau/',
    authorBio: 'Co-fundador de CloserBroker. Trabaja con agencias inmobiliarias en Colombia y México desde hace más de 5 años.',
    readTime: '13 min de lectura',
    coverEyebrow: 'Guía pilar',
    coverVariant: 'c',
  },
  {
    slug: 'guia-mls-latinoamerica',
    title: 'Guía completa del MLS (Multiple Listing Service) en Latinoamérica',
    titleAccent: 'cómo funciona',
    excerpt: 'Qué es el MLS, cómo funciona, estado en Colombia y México, y por qué la bolsa inmobiliaria integrada en tu CRM puede ser una mejor alternativa.',
    category: 'estrategia',
    categoryLabel: 'Estrategia',
    date: '2026-05-21',
    dateLabel: '21 de mayo de 2026',
    updatedDate: '2026-05-21',
    updatedDateLabel: '21 de mayo de 2026',
    author: 'Louis Thoumazeau',
    authorUrl: 'https://www.linkedin.com/in/louis-thoumazeau/',
    authorBio: 'Co-fundador de CloserBroker. Trabaja con agencias inmobiliarias en Colombia y México desde hace más de 5 años.',
    readTime: '12 min de lectura',
    coverEyebrow: 'Guía pilar',
    coverVariant: 'b',
  },
  {
    slug: 'que-es-crm-inmobiliario',
    title: '¿Qué es un CRM inmobiliario y por qué lo necesitas en 2026?',
    titleAccent: 'guía completa',
    excerpt: 'Definición clara, las 9 funciones imprescindibles, beneficios concretos, criterios de elección y errores a evitar. Todo lo que un asesor o agencia debe saber sobre el CRM inmobiliario en 2026.',
    category: 'crm',
    categoryLabel: 'CRM',
    date: '2026-05-20',
    dateLabel: '20 de mayo de 2026',
    updatedDate: '2026-05-20',
    updatedDateLabel: '20 de mayo de 2026',
    author: 'Louis Thoumazeau',
    authorUrl: 'https://www.linkedin.com/in/louis-thoumazeau/',
    authorBio: 'Co-fundador de CloserBroker. Trabaja con agencias inmobiliarias en Colombia y México desde hace más de 5 años.',
    readTime: '13 min de lectura',
    coverEyebrow: 'Guía completa',
    coverVariant: 'a',
  },
  {
    slug: '5-procesos-automatizar-agencia-inmobiliaria',
    title: '5 procesos que toda agencia inmobiliaria debería automatizar',
    titleAccent: 'cómo hacerlo',
    excerpt: 'Recordatorios, distribución de leads, seguimiento de prospectos, alertas de propiedades y reportes: identifica los 5 procesos que multiplican la productividad de tu equipo cuando los automatizas.',
    category: 'automatizacion',
    categoryLabel: 'Automatización',
    date: '2026-04-08',
    dateLabel: '8 de abril de 2026',
    author: 'Equipo CloserBroker',
    readTime: '9 min de lectura',
    coverEyebrow: 'How-to',
    coverVariant: 'b',
  },
  {
    slug: '5-errores-crm-inmobiliarias',
    title: '5 errores que cometen las inmobiliarias con su CRM (y cómo evitarlos)',
    titleAccent: 'aprende a evitarlos',
    excerpt: 'De la configuración inicial deficiente al abandono progresivo: las 5 trampas más comunes que matan el ROI de un CRM inmobiliario, y cómo asegurar que tu equipo lo adopte de verdad.',
    category: 'crm',
    categoryLabel: 'CRM',
    date: '2026-04-01',
    dateLabel: '1 de abril de 2026',
    author: 'Equipo CloserBroker',
    readTime: '9 min de lectura',
    coverEyebrow: 'Errores frecuentes',
    coverVariant: 'c',
  },
];

// Liste COMPLETE d'articles (incluant ceux avec date future). Utilisée pour
// la lookup individuelle d'un article par slug — un article programmé doit être
// accessible via URL directe pour preview, partage et indexation Google.
const getAllBlogArticles = (country) => {
  const pillar = country === 'mx' ? PILLAR_MX : PILLAR_CO;
  return [pillar, ...COMMON_ARTICLES];
};

// Liste FILTREE pour le blog index. Articles avec date future sont cachés
// jusqu'à leur date de publication. C'est uniquement la visibilité dans
// /<country>/blog/ qui est affectée — l'URL individuelle reste accessible.
const getBlogArticles = (country) => {
  const todayISO = new Date().toISOString().slice(0, 10);
  const isPublished = (a) => !a.date || a.date <= todayISO;
  return getAllBlogArticles(country).filter(isPublished);
};

// Pour rétrocompatibilité avec l'ancien code (anciens shells /blog/*) qui consomme BLOG_ARTICLES,
// on expose la version CO par défaut. Les nouveaux shells /<country>/blog/* doivent appeler getBlogArticles(country).
const BLOG_ARTICLES = getBlogArticles('co');

// ────────────────────────────────────────────────────────────
// BlogCover — visuel gradient réutilisable (card index + hero article)
// Variants A / B / C : positions différentes pour les aurora highlights
// afin que les 3 articles aient des covers similaires mais distinctes.
// ────────────────────────────────────────────────────────────

const BLOG_COVER_VARIANTS = {
  a: { hi1: { top: -80,  right: -60, size: 260, alpha: 0.32 }, hi2: { bottom: -100, left: -80,  size: 280, alpha: 0.18 } },
  b: { hi1: { top: -100, left:  -40, size: 240, alpha: 0.30 }, hi2: { bottom: -90,  right: -70, size: 260, alpha: 0.22 } },
  c: { hi1: { top: -60,  right: -30, size: 220, alpha: 0.28 }, hi2: { top: '40%',   left: -100, size: 300, alpha: 0.22 } },
};

const BlogCover = ({ eyebrow, title, variant = 'a', size = 'md' }) => {
  const v = BLOG_COVER_VARIANTS[variant] || BLOG_COVER_VARIANTS.a;
  const isLg = size === 'lg';
  return (
    <div style={{
      width: '100%',
      aspectRatio: '16 / 9',
      background: 'linear-gradient(135deg, #54B5E3 0%, #C69CFF 100%)',
      position: 'relative',
      overflow: 'hidden',
      display: 'flex',
      flexDirection: 'column',
      justifyContent: 'center',
      alignItems: 'center',
      textAlign: 'center',
      padding: isLg ? '48px 56px' : '24px 32px',
      color: '#fff',
    }}>
      <div style={{
        position: 'absolute',
        ...v.hi1,
        width: v.hi1.size, height: v.hi1.size,
        borderRadius: '50%',
        background: `radial-gradient(circle, rgba(255,255,255,${v.hi1.alpha}) 0%, transparent 70%)`,
        filter: 'blur(20px)',
        pointerEvents: 'none',
      }} />
      <div style={{
        position: 'absolute',
        ...v.hi2,
        width: v.hi2.size, height: v.hi2.size,
        borderRadius: '50%',
        background: `radial-gradient(circle, rgba(255,255,255,${v.hi2.alpha}) 0%, transparent 70%)`,
        filter: 'blur(24px)',
        pointerEvents: 'none',
      }} />

      {eyebrow && (
        <div className="mono" style={{
          fontSize: isLg ? 12 : 10,
          textTransform: 'uppercase',
          letterSpacing: '0.14em',
          opacity: 0.88,
          marginBottom: isLg ? 22 : 12,
          position: 'relative',
          padding: isLg ? '6px 14px' : '4px 10px',
          background: 'rgba(255,255,255,0.18)',
          borderRadius: 999,
          backdropFilter: 'blur(8px)',
        }}>{eyebrow}</div>
      )}

      <div style={{
        position: 'relative',
        fontSize: isLg ? 'clamp(26px, 3.4vw, 40px)' : 'clamp(15px, 1.6vw, 19px)',
        fontWeight: 500,
        lineHeight: 1.18,
        letterSpacing: '-0.015em',
        maxWidth: isLg ? 760 : 360,
        textWrap: 'balance',
      }}>
        {title}
      </div>
    </div>
  );
};

window.BLOG_CATEGORIES = BLOG_CATEGORIES;
window.BLOG_ARTICLES = BLOG_ARTICLES;
window.getBlogArticles = getBlogArticles;
window.getAllBlogArticles = getAllBlogArticles;
window.BlogCover = BlogCover;
