let page = 1;
let loading = false;
let entryCounter = 0;
let lastAdId = null;
let adIndex = 0;
let ads = []; 
const LOCATION_KEY = "userLocation";
const LOCATION_INTERVAL = 5 * 60 * 1000; 
function updateLocation() {
  if (!navigator.geolocation) {
    console.warn("Geolocation wird nicht unterstützt.");
    return;
  }
  navigator.geolocation.getCurrentPosition(
    pos => {
      const coords = {
        lat: pos.coords.latitude,
        lon: pos.coords.longitude,
        ts: Date.now()
      };
      localStorage.setItem(LOCATION_KEY, JSON.stringify(coords));
      console.log("Location aktualisiert:", coords);
    },
    err => {
      console.warn("Geolocation verweigert oder fehlgeschlagen:", err);
    }
  );
}
function getStoredLocation() {
  try {
    const loc = localStorage.getItem(LOCATION_KEY);
    return loc ? JSON.parse(loc) : null;
  } catch (e) {
    console.warn("Fehler beim Parsen von Location:", e);
    return null;
  }
}
(function initLocation() {
  const loc = getStoredLocation();
  if (!loc || Date.now() - loc.ts > LOCATION_INTERVAL) {
    updateLocation();
  }
  // danach regelmäßig erneuern
  setInterval(updateLocation, LOCATION_INTERVAL);
})();
// Hilfsfunktion: simples HTML-escape
function escapeHtml(str) {
  if (str === null || str === undefined) return "";
  return String(str).replace(/[&<>"']/g, function(m) {
    return { '&':'&','<':'<','>':'>','"':'"',"'":''' }[m];
  });
}
function insertAd(placeholderId) {
  const coords = getStoredLocation();
  url = "/js-ajax-ads.php?";
  if (coords) {
	url += `&lat=${coords.lat}&lon=${coords.lon}`;
  }
  return fetch(url)
    .then(res => {
      if (!res.ok) throw new Error("HTTP " + res.status);
      return res.json();
    })
    .then(ad => {
      if (ad.id === lastAdId) {
        return insertAd(placeholderId);
      }
	  
      const placeholder = document.getElementById(placeholderId);
      if (placeholder) {
        placeholder.outerHTML = `
${ad.html}
`;
        lastAdId = ad.id;
      }
    })
    .catch(err => {
      console.error("Fehler beim Laden eines Werbeblocks:", err);
    });
}
function renderEntries(entries) {
  let html = "";
  const container = document.getElementById("content");
  if (!Array.isArray(entries)) entries = [entries];
  entries.forEach(entry => {
    const dateStr = entry.timestamp || "";
    
	if(entry.type === "note"){
		let timeStr = "";
		if(entry.start?.trim() && entry.expire?.trim()){
			timeStr = "Von " + entry.start + " – " + entry.expire;
		}else{
			timeStr = "Am " + entry.timestamp;
		}
		 html = `
		  
		   	
			
			  
			    ${timeStr} gab es aufgrund eingeschränkter Kapazitäten keine Aufzeichnung. Jetzt aktiv werden und dem Dienst zu Finanzieren helfen!
			    
			   
			 
			
		  
		`;
	}
	if(entry.type === "report"){
	
	  const statRecent = (entry.statistics && entry.statistics[1] !== undefined) ? entry.statistics[1] + "%" : "0%";
      const statAll    = (entry.statistics && entry.statistics[0] !== undefined) ? entry.statistics[0] + "%" : "0%";
      const title   = escapeHtml(entry.title);
      const excerpt = escapeHtml(entry.excerpt);
      const city    = escapeHtml(entry.city);
      const id      = encodeURIComponent(entry.id);
      const uid     = encodeURIComponent(entry.uid);
      const poster  = escapeHtml(entry.poster);
	  
	  if(entry.comments < 1){
		statusComments = "";
	  }else if(entry.comments == 1){
		statusComments = '1 Kommentar
';
	  }else if(entry.comments > 1){
		statusComments = '' + entry.comments + ' Kommentare
';
	  }
	  
	  if(entry.greyit == 1){
		greyIt = 'style="color: darkgrey !important;"';
	  }else{
		greyIt = '';
	  }
	  
	  switch (entry.status) {
	    case "Gesamte Aufzeichnung wird aufbereitet.":
		  statusHtml = 'Aufbereitung dauert an';
		  break;
	    default:
		  statusHtml = "";
	  }
      html = `
      
        
        
          
			${title}
			${excerpt}…
			${statusHtml}${statusComments}${city}, ${dateStr}
            
           
         
        
      
      `;
	}
    container.insertAdjacentHTML("beforeend", html);
    entryCounter++;
    if (entryCounter % 3 === 0) {
      const placeholderId = "ad-" + entryCounter;
      container.insertAdjacentHTML("beforeend", ``);
      insertAd(placeholderId);
    }
  });
}
function loadMoreContent() {
  if (loading) return;
  loading = true;
  const loadingElement = document.getElementById("loading");
  loadingElement.style.display = "block";
  const params = new URLSearchParams(window.location.search);
  const zeig = params.get("zeig");
  var url = `/js-ajax-content.php?seite=${page}`;
  if(zeig !== null){
    url += `&zeig=${zeig}`;
  }
  fetch(url)
    .then(response => {
      if (!response.ok) throw new Error("HTTP " + response.status);
      return response.json();
    })
    .then(data => {
      console.log("AJAX data:", data); 
      if (!data || (Array.isArray(data) && data.length === 0)) {
        window.removeEventListener("scroll", onScroll);
        return;
      }
      renderEntries(data);
      page++;
    })
    .catch(error => {
      console.error('Fehler beim Laden der Inhalte:', error);
    })
    .finally(() => {
      loadingElement.style.display = "none";
      loading = false;
    });
}
window.onload = function() {
  loadMoreContent();
};