// Hash-Funktion für Ad-IDs
export function generateAdId(adName, subcategoryName, categoryName) {
  const combined = `${categoryName}-${subcategoryName}-${adName}`;
  let hash = 0;
  for (let i = 0; i < combined.length; i++) {
    const char = combined.charCodeAt(i);
    hash = ((hash << 5) - hash) + char;
    hash = hash & hash; // 32-bit integer
  }
  return Math.abs(hash).toString(36); // Base36 für kürzere IDs
}

// Link kopieren Funktionalität
export const createCopyLinkHandler = (onSuccess) => async (adId, adName) => {
  try {
    // Entferne bestehende Sprungmarke aus der URL
    const currentUrl = window.location.href;
    const baseUrl = currentUrl.split('#')[0]; // Alles vor dem ersten #
    const linkWithAnchor = `${baseUrl}#${adId}`;
    await navigator.clipboard.writeText(linkWithAnchor);
    onSuccess(`Link zu "${adName}" wurde kopiert!`);
  } catch (err) {
    // Fallback für ältere Browser
    const textArea = document.createElement('textarea');
    const baseUrl = window.location.href.split('#')[0];
    textArea.value = `${baseUrl}#${adId}`;
    document.body.appendChild(textArea);
    textArea.select();
    document.execCommand('copy');
    document.body.removeChild(textArea);
    onSuccess(`Link zu "${adName}" wurde kopiert!`);
  }
};

// iFrame Refresh Funktionalität
export const createRefreshAdHandler = (onSuccess, onInfo) => (adId, adName) => {
  // Finde alle iFrames innerhalb des Ad-Containers
  const adContainer = document.getElementById(adId);
  if (adContainer) {
    const iframes = adContainer.querySelectorAll('iframe');
    let refreshedCount = 0;
    
    iframes.forEach((iframe) => {
      if (iframe.src) {
        // Füge einen Timestamp als URL-Parameter hinzu, um den Cache zu umgehen
        const url = new URL(iframe.src);
        url.searchParams.set('refresh', Date.now().toString());
        iframe.src = url.toString();
        refreshedCount++;
      }
    });
    
    if (refreshedCount > 0) {
      onSuccess(`Animation${refreshedCount > 1 ? 'en' : ''} "${adName}" ${refreshedCount > 1 ? 'wurden' : 'wurde'} neu geladen!`);
    } else {
      onInfo(`Keine Animationen in "${adName}" gefunden.`);
    }
  }
};

// Scroll zu Sprungmarke mit Offset
export const scrollToAnchor = (hash, offset = 20) => {
  if (hash) {
    // Kurz warten bis die Inhalte gerendert sind
    setTimeout(() => {
      const element = document.getElementById(hash);
      if (element) {
        // Scroll mit Offset, um Navigation zu berücksichtigen
        const elementTop = element.offsetTop - offset;
        window.scrollTo({
          top: elementTop,
          behavior: 'smooth'
        });
        // Kurz hervorheben
        element.style.backgroundColor = '#edff5f';
        setTimeout(() => {
          element.style.backgroundColor = '';
        }, 2000);
      }
    }, 300);
  }
};
