/**
 * Directus API Client
 * Źródło danych: https://cms.dexterlab.pl/ - kolekcja Laboratorium_AI
 */

const DIRECTUS_URL = import.meta.env.DEV ? '/api' : 'https://cms.dexterlab.pl';
const COLLECTION = 'Laboratorium_AI';

// Cache storage
let dataCache = null;
let cacheTimestamp = 0;
const CACHE_DURATION = 5 * 60 * 1000; // 5 minut

/**
 * Pobiera wszystkie elementy z kolekcji Laboratorium_AI
 */
export async function fetchLaboratoriumData() {
  // Sprawdź cache
  if (dataCache && Date.now() - cacheTimestamp < CACHE_DURATION) {
    return dataCache;
  }

  try {
    const response = await fetch(
      `${DIRECTUS_URL}/items/${COLLECTION}?sort=-date_published&limit=-1`,
      {
        headers: {
          'Content-Type': 'application/json',
          'Origin': window.location.origin,
        },
      }
    );

    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const result = await response.json();
    
    dataCache = result.data;
    cacheTimestamp = Date.now();
    
    return result.data;
  } catch (error) {
    console.error('Błąd pobierania danych z Directus:', error);
    throw error;
  }
}

/**
 * Pobiera pojedynczy element po ID
 */
export async function fetchLaboratoriumItem(id) {
  try {
    const response = await fetch(`${DIRECTUS_URL}/items/${COLLECTION}/${id}`);
    
    if (!response.ok) {
      throw new Error(`HTTP error! status: ${response.status}`);
    }

    const result = await response.json();
    return result.data;
  } catch (error) {
    console.error(`Błąd pobierania elementu ${id}:`, error);
    return null;
  }
}

/**
 * Czyści cache - wymusza odświeżenie
 */
export function clearCache() {
  dataCache = null;
  cacheTimestamp = 0;
}

/**
 * Mapuje dane z Directus na format strony
 */
export function mapDirectusToContent(items) {
  if (!items || items.length === 0) return null;

  // Preferuj published, fallback na wszystkie
  const published = items.filter(item => item.status === 'published');
  const sourceItems = published.length > 0 ? published : items;

  // Slideshow - featured lub pierwsze 3
  const featured = sourceItems.filter(item => item.is_featured === true);
  const slideshow = (featured.length > 0 ? featured : sourceItems.slice(0, 3)).map(item => ({
    type: 'hot',
    badge: item.badge || null,
    title: item.title,
    category: item.category || 'AI',
    readTime: '5 min read',
    bgImage: item.cover_image ? `${DIRECTUS_URL}/assets/${item.cover_image}` : '',
  }));

  const slideshowTitles = new Set(slideshow.map(s => s.title));

  // Pozostałe jako articles (max 8)
  const articles = sourceItems
    .filter(item => !slideshowTitles.has(item.title))
    .slice(0, 8)
    .map((item, index) => ({
      type: item.badge?.toLowerCase() || 'article',
      badge: item.badge || null,
      title: item.title,
      category: item.category || 'AI',
      readTime: item.read_time || '5 min read',
      bgImage: item.cover_image ? `${DIRECTUS_URL}/assets/${item.cover_image}` : '',
      gridColumn: getGridColumn(index),
      gridRow: getGridRow(index),
      hero: index === 0,
    }));

  return { slideshow, articles };
}

function getGridColumn(index) {
  // Jasny układ dla 4-kolumnowej siatki
  // 1: 2/3 (2 kol), 2: 3/4 (1 kol), 3: 4/5 (1 kol), 4: 4/5 (1 kol)
  // 5: 1/2 (1 kol), 6: 2/3 (1 kol), 7: 3/4 (1 kol), 8: 4/5 (1 kol)
  if (index === 0) return '1 / 3'; // 2 kolumny
  if (index === 1) return '3 / 4'; // 1 kolumna
  if (index === 2) return '4 / 5'; // 1 kolumna
  if (index === 3) return '4 / 5'; // 1 kolumna
  if (index === 4) return '1 / 2'; // 1 kolumna
  if (index === 5) return '2 / 3'; // 1 kolumna
  if (index === 6) return '3 / 4'; // 1 kolumna
  if (index === 7) return '4 / 5'; // 1 kolumna
  return '1 / 2';
}

function getGridRow(index) {
  // Wiersze dla układu: 2 duże na górze (2/4), reszta po 1 (3/4, 4/5)
  if (index === 0) return '2 / 4'; // 2 rzędy
  if (index === 1) return '2 / 4'; // 2 rzędy
  if (index === 2) return '2 / 3'; // 1 rząd
  if (index === 3) return '3 / 4'; // 1 rząd
  if (index === 4) return '4 / 5'; // 1 rząd
  if (index === 5) return '4 / 5'; // 1 rząd
  if (index === 6) return '4 / 5'; // 1 rząd
  if (index === 7) return '4 / 5'; // 1 rząd
  return '4 / 5';
}