// Logika uživatelského rozhraní Electron aplikace

// Globální stavy
let currentStep = 1;
let currentLang = 'cz';
let projects = [];
let currentProject = {
  id: null,
  title: '',
  dateText: '',
  description: '',
  colorScheme: 'light',
  passwordProtected: false,
  password: '',
  photoSource: 'local',
  localPath: '',
  exportPath: '',
  days: [], // [{ day: 1, label: 'Den 1', color: '#d73027', title: '', summary: '' }]
  points: [] // [{ day: 1, order: 1, name: '', type: 'zastávka', lat, lon, description: '', photos: [] }]
};

// Seznam barviček pro jednotlivé dny (paleta)
const DAY_COLORS = [
  '#d73027', '#fc8d59', '#e6ab02', '#66a61e', '#1b9e77',
  '#1f78b4', '#7570b3', '#e7298a', '#8c510a', '#543005'
];

// --- PŘEKLAD (LOKALIZACE) CZ / EN ---

const translations = {
  cz: {
    "app-title-text": "Živé vzpomínky na dovolenou",
    "new-vac-text": "Nová dovolená",
    "wizard-title": "Vytvořit novou dovolenou",
    "step-ind-1": "1. Základní info",
    "step-ind-2": "2. Fotografie",
    "step-ind-3": "3. Místa a deník",
    "step-ind-4": "4. Generování",

    "btn-wiki-enrich": "🌐 Doplnit místa z Wikipedie",
    "success-title": "Dovolená úspěšně vygenerována!",
    "success-subtitle": "Složka obsahuje kompletní responzivní web s mapou a galerii fotek.",
    "netlify-box-desc": "Vygenerovaný web můžete automaticky nahrát přímo na svůj Netlify účet.",
    "btn-netlify-auth": "🔗 Získat token",
    "btn-netlify-zip": "🚀 Publikovat na Netlify",
    "btn-open-output": "📂 Otevřít složku",
    "btn-close-wizard": "Zavřít",
    "btn-prev-step": "Zpět",
    "btn-next-step": "Pokračovat",
    "btn-select-dir": "Vybrat složku",
    "btn-select-export-dir": "Vybrat složku",
    "btn-select-cover": "Vybrat fotku",
    "help-modal-title": "Rychlá pomoc",
    "lbl-dont-show-again": "Už nezobrazovat při spuštění",
    "btn-close-help-confirm": "Rozumím",
    "btn-close-help": "Zavřít",
    "import-mobile-text": "Import z mobilu"
  },
  en: {
    "app-title-text": "Live Vacation Memories",
    "new-vac-text": "New Vacation",
    "wizard-title": "Create New Vacation",
    "step-ind-1": "1. Basic Info",
    "step-ind-2": "2. Photos",
    "step-ind-3": "3. Places & Diary",
    "step-ind-4": "4. Generation",

    "btn-wiki-enrich": "🌐 Auto-fill from Wikipedia",
    "success-title": "Vacation successfully generated!",
    "success-subtitle": "The folder contains a complete responsive web map and photo gallery.",
    "netlify-box-desc": "You can automatically upload the generated web directly to your Netlify account.",
    "btn-netlify-auth": "🔗 Get token",
    "btn-netlify-zip": "🚀 Publish to Netlify",
    "btn-open-output": "📂 Open Folder",
    "btn-close-wizard": "Close",
    "btn-prev-step": "Back",
    "btn-next-step": "Continue",
    "btn-select-dir": "Select Folder",
    "btn-select-export-dir": "Select Folder",
    "btn-select-cover": "Select Photo",
    "help-modal-title": "Quick Help",
    "lbl-dont-show-again": "Don't show again on startup",
    "btn-close-help-confirm": "I understand",
    "btn-close-help": "Close",
    "import-mobile-text": "Import from mobile"
  }
};

const labelTranslations = {
  cz: {
    'label[for="vac-title"]': "Název dovolené",
    'label[for="vac-date"]': "Termín dovolené",
    'label[for="vac-desc"]': "Stručný úvodní text (nepovinné)",
    'label[for="vac-lock"]': "Zamknout stránku heslem",
    'label[for="vac-pass"]': "Heslo pro zobrazení webu",
    '#lbl-local-photos': "Složka s fotkami",
    '#step-4 label': "Cílová složka pro export webu",
    '#step-3 h3': "Zastávky a itinerář",
    '#lbl-vac-cover': "Úvodní ilustrační fotografie (nepovinné)"
  },
  en: {
    'label[for="vac-title"]': "Vacation Title",
    'label[for="vac-date"]': "Vacation Dates",
    'label[for="vac-desc"]': "Short introductory text (optional)",
    'label[for="vac-lock"]': "Password protect page",
    'label[for="vac-pass"]': "Password to view site",
    '#lbl-local-photos': "Photos Folder",
    '#step-4 label': "Target Folder for Export",
    '#step-3 h3': "Stops & Itinerary",
    '#lbl-vac-cover': "Introductory illustrative photo (optional)"
  }
};

function applyTranslations() {
  const dict = translations[currentLang];
  Object.keys(dict).forEach(id => {
    const el = document.getElementById(id);
    if (el) {
      if (id === 'btn-new-vacation') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" style="margin-right:2px;"><line x1="12" y1="5" x2="12" y2="19"></line><line x1="5" y1="12" x2="19" y2="12"></line></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-prev-step') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="15 18 9 12 15 6"></polyline></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-next-step') {
        el.innerHTML = `<span>${dict[id]}</span> <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"><polyline points="9 18 15 12 9 6"></polyline></svg>`;
      } else if (id === 'btn-select-dir' || id === 'btn-select-export-dir') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-connect-google') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-connect-rajce') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"></path><circle cx="12" cy="7" r="4"></circle></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-wiki-enrich') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="2" y1="12" x2="22" y2="12"></line><path d="M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z"></path></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-netlify-auth') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path><polyline points="15 3 21 3 21 9"></polyline><line x1="10" y1="14" x2="21" y2="3"></line></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-netlify-zip') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="21 8 21 21 3 21 3 8"></polyline><rect x="1" y="3" width="22" height="5"></rect><line x1="10" y1="12" x2="14" y2="12"></line></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-open-output') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"></path><path d="M2 10h20"></path></svg> <span>${dict[id]}</span>`;
      } else if (id === 'btn-select-cover') {
        el.innerHTML = `<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" style="margin-right:4px;"><rect x="3" y="3" width="18" height="18" rx="2" ry="2"></rect><circle cx="8.5" cy="8.5" r="1.5"></circle><polyline points="21 15 16 10 5 21"></polyline></svg> <span>${dict[id]}</span>`;
      } else {
        el.textContent = dict[id];
      }
    }
  });

  const labelDict = labelTranslations[currentLang];
  Object.keys(labelDict).forEach(selector => {
    const el = document.querySelector(selector);
    if (el) {
      el.textContent = labelDict[selector];
    }
  });

  // Překlad placeholderů
  if (currentLang === 'en') {
    document.getElementById('vac-title').placeholder = "e.g. Scotland 2026, Iceland 2025...";
    document.getElementById('vac-date').placeholder = "e.g. July 1–9, 2026";
    document.getElementById('vac-desc').placeholder = "Short description or motto...";
    document.getElementById('vac-pass').placeholder = "Enter password...";
    document.getElementById('local-path-display').placeholder = "No folder selected";
    document.getElementById('export-path-display').placeholder = "Select folder to save exported web";
    document.getElementById('vac-cover-display').placeholder = "Automatic selection from photos...";
  } else {
    document.getElementById('vac-title').placeholder = "např. Skotsko 2026, Island 2025...";
    document.getElementById('vac-date').placeholder = "např. 1.–9. července 2026";
    document.getElementById('vac-desc').placeholder = "Krátký popis nebo motto dovolené...";
    document.getElementById('vac-pass').placeholder = "Zadejte heslo...";
    document.getElementById('local-path-display').placeholder = "Nebyla vybrána žádná složka";
    document.getElementById('export-path-display').placeholder = "Vyberte složku, kam uložit vygenerovaný web";
    document.getElementById('vac-cover-display').placeholder = "Automatický výběr z fotek...";
  }

  // Překlad prázdného stavu
  const emptyState = document.querySelector('#vacation-list .empty-state');
  if (emptyState) {
    emptyState.querySelector('h2').textContent = currentLang === 'en' ? "No vacations yet" : "Zatím žádná dovolená";
    emptyState.querySelector('p').textContent = currentLang === 'en' ? "Create your first vacation by clicking the button above!" : "Vytvořte svou první dovolenou kliktum na tlačítko výše!";
  }
}

// Inicializace po načtení DOM
document.addEventListener('DOMContentLoaded', async () => {
  // Prvky Dashboardu
  const btnNewVacation = document.getElementById('btn-new-vacation');
  const dashboardView = document.getElementById('dashboard-view');
  
  // Prvky Wizardu
  const wizardModal = document.getElementById('wizard-modal');
  const btnCloseWizard = document.getElementById('btn-close-wizard');
  const btnPrevStep = document.getElementById('btn-prev-step');
  const btnNextStep = document.getElementById('btn-next-step');
  
  // Prvky Krok 1
  const vacTitle = document.getElementById('vac-title');
  const vacDate = document.getElementById('vac-date');
  const vacDesc = document.getElementById('vac-desc');
  const vacLock = document.getElementById('vac-lock');
  const vacPass = document.getElementById('vac-pass');
  const passwordGroup = document.getElementById('password-group');
  
  // Prvky Krok 2
  const btnSelectDir = document.getElementById('btn-select-dir');
  const localPathDisplay = document.getElementById('local-path-display');
  const photoScanStatus = document.getElementById('photo-scan-status');
  
  // Prvky Krok 3
  const stopsContainer = document.getElementById('stops-container');
  const btnWikiEnrich = document.getElementById('btn-wiki-enrich');
  
  // Prvky Krok 4
  const btnSelectExportDir = document.getElementById('btn-select-export-dir');
  const exportPathDisplay = document.getElementById('export-path-display');
  const genProgressUi = document.getElementById('generation-progress-ui');
  const genProgressBar = document.getElementById('generation-progress-bar');
  const genStatusText = document.getElementById('generation-status-text');
  const genSuccessUi = document.getElementById('generation-success-ui');
  
  // Prvky Help Modalu
  const helpModal = document.getElementById('help-modal');
  const btnCloseHelp = document.getElementById('btn-close-help');
  const btnCloseHelpConfirm = document.getElementById('btn-close-help-confirm');
  const chkDontShowAgain = document.getElementById('chk-dont-show-again');
  const helpModalContent = document.getElementById('help-modal-content');
  
  console.log('[DEBUG] DOMContentLoaded start. Loading projects...');
  // Načtení existujících projektů
  await loadProjects();
  console.log('[DEBUG] Projects loaded successfully.');

  // Akce: Nová dovolená
  btnNewVacation.addEventListener('click', () => {
    initNewProject();
    openWizard();
  });

  // Akce: Import z mobilu
  const btnImportMobile = document.getElementById('btn-import-mobile');
  if (btnImportMobile) {
    btnImportMobile.addEventListener('click', async () => {
      const res = await window.api.importMobileZip();
      if (res.success) {
        alert(currentLang === 'en' 
          ? 'Mobile trip successfully imported!' 
          : 'Mobilní cesta byla úspěšně importována!');
        loadProjects();
      } else if (res.error) {
        alert(res.error);
      }
    });
  }

  // Akce: Zavřít wizard
  btnCloseWizard.addEventListener('click', () => {
    closeWizard();
  });

  // Zámek heslem
  vacLock.addEventListener('change', (e) => {
    passwordGroup.style.display = e.target.checked ? 'block' : 'none';
  });

  // Logika Help Modalu
  const openHelpModal = async () => {
    console.log('[DEBUG] openHelpModal called.');
    try {
      const markdown = await window.api.readHelpFile();
      console.log('[DEBUG] Help file read, content length:', markdown ? markdown.length : 0);
      helpModalContent.innerHTML = markdownToHtml(markdown);
      helpModal.classList.add('active');
      console.log('[DEBUG] Help modal active class added.');
    } catch (err) {
      console.error('Chyba při načítání nápovědy:', err);
    }
  };

  const closeHelpModal = () => {
    if (chkDontShowAgain.checked) {
      localStorage.setItem('lvm_hide_help', 'true');
    }
    helpModal.classList.remove('active');
  };

  btnCloseHelp.addEventListener('click', closeHelpModal);
  btnCloseHelpConfirm.addEventListener('click', closeHelpModal);

  // Naslouchání na zprávu z hlavního menu (Rychlá pomoc)
  window.api.onOpenHelpModal(() => {
    console.log('[DEBUG] IPC open-help-modal event received.');
    openHelpModal();
  });

  // Kontrola při spuštění aplikace (pokud není zaškrtnuto Už nezobrazovat)
  const hideHelpOnStartup = localStorage.getItem('lvm_hide_help') === 'true';
  console.log('[DEBUG] hideHelpOnStartup is:', hideHelpOnStartup);
  if (!hideHelpOnStartup) {
    setTimeout(openHelpModal, 500);
  }

  // Barevná schémata výběr
  document.querySelectorAll('.color-option').forEach(opt => {
    opt.addEventListener('click', () => {
      document.querySelectorAll('.color-option').forEach(o => o.classList.remove('active'));
      opt.classList.add('active');
      currentProject.colorScheme = opt.dataset.scheme;
    });
  });

  // Výběr úvodní ilustrační fotky
  const btnSelectCover = document.getElementById('btn-select-cover');
  const vacCoverDisplay = document.getElementById('vac-cover-display');
  const coverPreview = document.getElementById('cover-preview');
  const coverPreviewWrap = document.getElementById('cover-preview-wrap');

  btnSelectCover.addEventListener('click', async () => {
    const file = await window.api.selectFile();
    if (file) {
      currentProject.coverPhoto = file;
      vacCoverDisplay.value = file;
      coverPreview.src = `file://${file}`;
      coverPreviewWrap.style.display = 'block';
    }
  });

  // Zdroje fotek jsou fixní (pouze lokální složka)

  // Výběr lokální složky
  btnSelectDir.addEventListener('click', async () => {
    const dir = await window.api.selectDirectory();
    if (dir) {
      localPathDisplay.value = dir;
      currentProject.localPath = dir;
      
      // Skenování fotek
      photoScanStatus.style.display = 'block';
      photoScanStatus.textContent = 'Prohledávání složky a čtení EXIF dat...';
      
      try {
        const photos = await window.api.scanPhotos(dir);
        photoScanStatus.textContent = `Nalezeno ${photos.length} fotografií. EXIF načten.`;
        
        // Zpracujeme geolokaci a čas fotek do zastávek
        processPhotosIntoStops(photos);
        // Spustíme automatické vyhledání názvů míst a popisů na pozadí
        startBackgroundEnrichment();
      } catch (err) {
        photoScanStatus.textContent = `Chyba při skenování: ${err.message}`;
      }
    }
  });

  // Výběr složky pro export
  btnSelectExportDir.addEventListener('click', async () => {
    const dir = await window.api.selectDirectory();
    if (dir) {
      exportPathDisplay.value = dir;
      currentProject.exportPath = dir;
    }
  });

  // Obohacení z Wikipedie
  btnWikiEnrich.addEventListener('click', async () => {
    btnWikiEnrich.disabled = true;
    btnWikiEnrich.textContent = 'Vyhledávání na Wikipedii...';
    
    for (let i = 0; i < currentProject.points.length; i++) {
      const pt = currentProject.points[i];
      if (pt.lat && pt.lon && !pt.description) {
        const wiki = await window.api.wikipediaGeosearch(pt.lat, pt.lon);
        if (wiki) {
          pt.name = wiki.title;
          pt.description = wiki.summary;
          // Aktualizovat UI pro konkrétní bod
          const inputName = document.getElementById(`stop-name-${i}`);
          const textDesc = document.getElementById(`stop-desc-${i}`);
          if (inputName) inputName.value = wiki.title;
          if (textDesc) textDesc.value = wiki.summary;
        }
      }
    }
    
    btnWikiEnrich.disabled = false;
    btnWikiEnrich.textContent = '🌐 Doplnit místa z Wikipedie';
  });

  // Navigace wizardu
  btnPrevStep.addEventListener('click', () => {
    if (currentStep > 1) {
      goToStep(currentStep - 1);
    }
  });

  btnNextStep.addEventListener('click', async () => {
    if (currentStep === 1) {
      // Validace Krok 1
      if (!vacTitle.value.trim()) {
        alert('Zadejte název dovolené.');
        return;
      }
      currentProject.title = vacTitle.value.trim();
      currentProject.dateText = vacDate.value.trim();
      currentProject.description = vacDesc.value.trim();
      currentProject.passwordProtected = vacLock.checked;
      currentProject.password = vacPass.value;
      
      goToStep(2);
    } else if (currentStep === 2) {
      // Validace Krok 2
      if (!currentProject.localPath) {
        alert('Vyberte složku s fotografiemi.');
        return;
      }
      // Vykreslíme body v Kroku 3
      renderStopsEditor();
      goToStep(3);
    } else if (currentStep === 3) {
      // Uložíme úpravy z Kroku 3 do currentProject
      saveStopsFromEditor();
      
      // Vygenerujeme přehled dnů
      generateDaysSummary();
      
      goToStep(4);
    } else if (currentStep === 4) {
      // Spustit generování webu
      if (!currentProject.exportPath) {
        alert('Vyberte cílovou složku pro export.');
        return;
      }

      // Uložit projekt do historie
      await window.api.saveProject(currentProject);

      btnNextStep.disabled = true;
      btnPrevStep.disabled = true;
      genProgressUi.style.display = 'block';
      genProgressBar.style.width = '0%';
      genStatusText.textContent = 'Spouštění optimalizace fotek a generování webu...';

      // Poslouchat pokrok a zobrazovat přesný průběh v procentech
      const unsubscribe = window.api.onGenerationProgress((progress) => {
        genStatusText.textContent = progress;
        if (progress.includes('Optimalizace fotek')) {
          const match = progress.match(/Optimalizace fotek \((\d+)\/(\d+)\)/);
          if (match) {
            const current = parseInt(match[1]);
            const total = parseInt(match[2]);
            const pct = Math.round((current / total) * 100);
            genProgressBar.style.width = pct + '%';
          }
        } else if (progress === 'Dokončeno!') {
          genProgressBar.style.width = '100%';
        }
      });

      const res = await window.api.generateWeb(currentProject, currentProject.exportPath);
      
      unsubscribe();
      btnNextStep.disabled = false;
      btnPrevStep.disabled = false;

      if (res.success) {
        if (res.exportPath) {
          currentProject.exportPath = res.exportPath;
          await window.api.saveProject(currentProject);
        }
        genProgressBar.style.width = '100%';
        genStatusText.textContent = 'Dovolená byla úspěšně vygenerována!';
        genSuccessUi.style.display = 'flex';
        btnNextStep.style.display = 'none';
        btnPrevStep.style.display = 'none';
      } else {
        alert('Chyba při generování: ' + res.error);
        genProgressUi.style.display = 'none';
      }
    }
  });

  // Tlačítko zavřít / hotovo po úspěšném vygenerování
  document.getElementById('btn-open-output').addEventListener('click', () => {
    closeWizard();
    loadProjects();
  });

  // Google Photos návod odebrán (integrace nepodporována kvůli omezení GPS dat v Google API)

  // Netlify Integrace v Kroku 4
  // Netlify Integrace v Kroku 4
  const btnNetlifyAuth = document.getElementById('btn-netlify-auth');
  const btnNetlifyZip = document.getElementById('btn-netlify-zip');
  const zipStatus = document.getElementById('zip-status');
  const zipStatusText = document.getElementById('zip-status-text');
  const netlifyVisitLink = document.getElementById('netlify-visit-link');
  const btnSaveToken = document.getElementById('btn-netlify-save-token');
  const btnLogoutToken = document.getElementById('btn-netlify-logout');
  const tokenInput = document.getElementById('netlify-token-input');
  
  let currentNetlifyToken = null;

  async function initNetlifyToken() {
    // 1. Zkusit načíst token ze souboru
    const fileToken = await window.api.getNetlifyToken();
    if (fileToken) {
      currentNetlifyToken = fileToken;
      updateNetlifyUI(true, true);
      return;
    }

    // 2. Zkusit načíst z localStorage
    const localToken = localStorage.getItem('netlify_token');
    if (localToken) {
      currentNetlifyToken = localToken;
      updateNetlifyUI(true, false);
      return;
    }

    // 3. Jinak odhlášen
    currentNetlifyToken = null;
    updateNetlifyUI(false, false);
  }

  function updateNetlifyUI(isLoggedIn, isFromFile) {
    if (!tokenInput || !btnSaveToken || !btnLogoutToken) return;
    
    const tokenContainer = document.getElementById('netlify-token-container');
    const statusContainer = document.getElementById('netlify-status-container');
    const statusText = document.getElementById('netlify-status-text');

    if (isLoggedIn) {
      if (tokenContainer) tokenContainer.style.display = 'none';
      if (statusContainer) statusContainer.style.display = 'flex';
      if (statusText) {
        statusText.textContent = currentLang === 'en' 
          ? (isFromFile ? '✓ Logged in via token file' : '✓ Logged in to Netlify') 
          : (isFromFile ? '✓ Přihlášen přes soubor tokenu' : '✓ Přihlášen k Netlify');
      }
      btnLogoutToken.style.display = isFromFile ? 'none' : 'inline-block';
    } else {
      if (tokenContainer) tokenContainer.style.display = 'flex';
      if (statusContainer) statusContainer.style.display = 'none';
      tokenInput.value = '';
    }
  }

  // Inicializovat token
  initNetlifyToken();

  if (btnSaveToken) {
    btnSaveToken.addEventListener('click', () => {
      const val = tokenInput.value.trim();
      if (val) {
        localStorage.setItem('netlify_token', val);
        currentNetlifyToken = val;
        updateNetlifyUI(true, false);
      }
    });
  }

  if (btnLogoutToken) {
    btnLogoutToken.addEventListener('click', () => {
      localStorage.removeItem('netlify_token');
      currentNetlifyToken = null;
      updateNetlifyUI(false, false);
    });
  }

  if (btnNetlifyAuth) {
    btnNetlifyAuth.addEventListener('click', () => {
      window.api.openNetlify();
    });
  }

  if (btnNetlifyZip) {
    btnNetlifyZip.addEventListener('click', async () => {
      if (!currentNetlifyToken) {
        alert(currentLang === 'en' 
          ? 'Please enter your Netlify Personal Access Token first.' 
          : 'Zadejte nejprve svůj Netlify Personal Access Token.');
        return;
      }

      zipStatus.style.display = 'flex';
      zipStatusText.textContent = currentLang === 'en' 
        ? 'Deploying interactive map to Netlify...' 
        : 'Nahrávám interaktivní mapu na Netlify...';
      zipStatus.style.color = 'var(--accent)';
      netlifyVisitLink.style.display = 'none';
      
      const res = await window.api.deployToNetlify(currentProject, currentNetlifyToken);
      if (res.success) {
        zipStatusText.textContent = currentLang === 'en'
          ? 'Successfully published to Netlify!'
          : 'Web byl úspěšně publikován na Netlify!';
        zipStatus.style.color = 'var(--success)';
        
        // Uložit informace o publikaci do projektu
        currentProject.netlifySiteId = res.siteId;
        currentProject.netlifyUrl = res.siteUrl;
        await window.api.saveProject(currentProject);

        netlifyVisitLink.href = res.siteUrl;
        netlifyVisitLink.style.display = 'inline-block';
        netlifyVisitLink.textContent = currentLang === 'en' ? 'Open website' : 'Zobrazit web';
      } else {
        zipStatusText.textContent = (currentLang === 'en' ? 'Error: ' : 'Chyba: ') + res.error;
        zipStatus.style.color = 'var(--danger-hover)';
      }
    });
  }

  // Přepínání motivů (Tmavý/Světlý)
  const btnThemeToggle = document.getElementById('btn-theme-toggle');
  if (btnThemeToggle) {
    btnThemeToggle.addEventListener('click', () => {
      const isLight = document.body.classList.toggle('light-mode');
      btnThemeToggle.textContent = isLight ? '☀️' : '🌙';
      localStorage.setItem('theme', isLight ? 'light' : 'dark');
    });

    const savedTheme = localStorage.getItem('theme');
    if (savedTheme === 'light') {
      document.body.classList.add('light-mode');
      btnThemeToggle.textContent = '☀️';
    }
  }

  // Přepínání jazyků (CZ/EN)
  const btnLangToggle = document.getElementById('btn-lang-toggle');
  if (btnLangToggle) {
    btnLangToggle.addEventListener('click', () => {
      currentLang = currentLang === 'cz' ? 'en' : 'cz';
      btnLangToggle.textContent = currentLang === 'cz' ? '🇬🇧' : '🇨🇿';
      applyTranslations();
      localStorage.setItem('lang', currentLang);
      loadProjects();
    });

    const savedLang = localStorage.getItem('lang');
    if (savedLang) {
      currentLang = savedLang;
      btnLangToggle.textContent = currentLang === 'cz' ? '🇬🇧' : '🇨🇿';
      applyTranslations();
    } else {
      btnLangToggle.textContent = '🇬🇧';
      applyTranslations();
    }
  }
});

// Inicializace čistého projektu
function initNewProject() {
  currentProject = {
    id: 'proj_' + Date.now(),
    title: '',
    dateText: '',
    description: '',
    colorScheme: 'light',
    coverPhoto: '',
    passwordProtected: false,
    password: '',
    photoSource: 'local',
    localPath: '',
    exportPath: '',
    days: [],
    points: []
  };

  // Reset formulářů v UI
  document.getElementById('vac-title').value = '';
  document.getElementById('vac-date').value = '';
  document.getElementById('vac-desc').value = '';
  document.getElementById('vac-lock').checked = false;
  document.getElementById('vac-pass').value = '';
  document.getElementById('password-group').style.display = 'none';
  document.getElementById('local-path-display').value = '';
  document.getElementById('vac-cover-display').value = '';
  document.getElementById('cover-preview-wrap').style.display = 'none';
  document.getElementById('cover-preview').src = '';
  document.getElementById('export-path-display').value = '';
  document.getElementById('photo-scan-status').style.display = 'none';
  
  // Barevné schéma výchozí
  document.querySelectorAll('.color-option').forEach(o => o.classList.remove('active'));
  document.querySelector('.color-option[data-scheme="light"]').classList.add('active');

  // Reset zobrazení generování
  document.getElementById('generation-progress-ui').style.display = 'none';
  document.getElementById('generation-success-ui').style.display = 'none';
  document.getElementById('btn-next-step').style.display = 'inline-flex';
  document.getElementById('btn-next-step').textContent = 'Pokračovat';
}

// Načtení projektů z disku a vykreslení dashboardu
async function loadProjects() {
  projects = await window.api.loadProjects();
  const list = document.getElementById('vacation-list');
  list.innerHTML = '';

  if (projects.length === 0) {
    list.innerHTML = `
      <div class="empty-state">
        <div class="icon">✈️</div>
        <h2>Zatím žádná dovolená</h2>
        <p>Vytvořte svou první dovolenou kliknutím na tlačítko výše!</p>
      </div>`;
    return;
  }

  projects.forEach(proj => {
    const card = document.createElement('div');
    card.className = 'project-card';
    
    const editText = currentLang === 'en' ? 'Edit' : 'Upravit';
    const regenText = currentLang === 'en' ? 'Re-export' : 'Exportovat znovu';
    const deleteText = currentLang === 'en' ? 'Delete' : 'Smazat';
    const titleTitle = currentLang === 'en' ? 'Click to open generated map in browser' : 'Kliknutím otevřete vygenerovanou mapu v prohlížeči';
    const noDates = currentLang === 'en' ? 'Dates not specified' : 'Termín neuveden';
    const noDesc = currentLang === 'en' ? 'No introductory text.' : 'Bez úvodního textu.';
    
    const coverSrc = proj.coverPhoto ? `file://${proj.coverPhoto}` : 'logo.jpg';

    card.innerHTML = `
      <div class="project-cover-wrap btn-open-project" style="cursor:pointer;" title="${titleTitle}">
        <img class="project-cover" src="${coverSrc}" alt="cover">
      </div>
      <h3 class="btn-open-project" style="cursor:pointer; text-decoration:none;" title="${titleTitle}">${esc(proj.title)}</h3>
      <p class="date">📅 ${esc(proj.dateText || noDates)}</p>
      <p class="description">${esc(proj.description || noDesc)}</p>
      <div class="project-actions">
        <button class="btn-edit" data-id="${proj.id}">
          <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7"></path><path d="M18.5 2.5a2.121 2.121 0 1 1 3 3L12 15l-4 1 1-4 9.5-9.5z"></path></svg>
          <span>${editText}</span>
        </button>
        <button class="secondary btn-regen" data-id="${proj.id}">
          <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="23 4 23 10 17 10"></polyline><polyline points="1 20 1 14 7 14"></polyline><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15"></path></svg>
          <span>${regenText}</span>
        </button>
        <button class="danger btn-delete" data-id="${proj.id}">
          <svg width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="3 6 5 6 21 6"></polyline><path d="M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg>
          <span>${deleteText}</span>
        </button>
      </div>`;
    list.appendChild(card);

    // Hover a click efekt na nadpis a obal fotky pro otevření projektu
    card.querySelectorAll('.btn-open-project').forEach(el => {
      el.addEventListener('click', async () => {
        if (proj.exportPath) {
          const res = await window.api.openProjectHtml(proj.exportPath);
          if (!res.success) {
            alert(res.error);
          }
        } else {
          alert(currentLang === 'en' ? 'This project has not been exported yet. Click "Edit" and finish the export.' : 'Tento projekt ještě nebyl exportován. Klikněte na "Upravit" a dokončete export.');
        }
      });
    });
  });

  // Přiřazení událostí na tlačítka karet
  document.querySelectorAll('.btn-edit').forEach(btn => {
    btn.addEventListener('click', () => {
      const proj = projects.find(p => p.id === btn.dataset.id);
      if (proj) {
        currentProject = JSON.parse(JSON.stringify(proj)); // Hluboká kopie
        fillUiFromProject();
        openWizard();
      }
    });
  });

  document.querySelectorAll('.btn-regen').forEach(btn => {
    btn.addEventListener('click', () => {
      const proj = projects.find(p => p.id === btn.dataset.id);
      if (proj) {
        currentProject = JSON.parse(JSON.stringify(proj));
        fillUiFromProject();
        openWizard();
        goToStep(4);
      }
    });
  });

  document.querySelectorAll('.btn-delete').forEach(btn => {
    btn.addEventListener('click', async () => {
      if (confirm('Opravdu chcete smazat tento projekt? Vygenerované soubory na disku zůstanou, ale projekt v aplikaci bude odstraněn.')) {
        projects = await window.api.deleteProject(btn.dataset.id);
        loadProjects();
      }
    });
  });
}

// Vyplnění formulářů z existujícího načteného projektu
function fillUiFromProject() {
  document.getElementById('vac-title').value = currentProject.title;
  document.getElementById('vac-date').value = currentProject.dateText;
  document.getElementById('vac-desc').value = currentProject.description || '';
  document.getElementById('vac-lock').checked = currentProject.passwordProtected;
  document.getElementById('vac-pass').value = currentProject.password || '';
  document.getElementById('password-group').style.display = currentProject.passwordProtected ? 'block' : 'none';
  document.getElementById('local-path-display').value = currentProject.localPath || '';
  document.getElementById('export-path-display').value = currentProject.exportPath || '';
  document.getElementById('vac-cover-display').value = currentProject.coverPhoto || '';
  if (currentProject.coverPhoto) {
    document.getElementById('cover-preview').src = `file://${currentProject.coverPhoto}`;
    document.getElementById('cover-preview-wrap').style.display = 'block';
  } else {
    document.getElementById('cover-preview-wrap').style.display = 'none';
    document.getElementById('cover-preview').src = '';
  }
  
  document.querySelectorAll('.color-option').forEach(o => {
    o.classList.remove('active');
    if (o.dataset.scheme === currentProject.colorScheme) {
      o.classList.add('active');
    }
  });

  // Reset zobrazení generování
  document.getElementById('generation-progress-ui').style.display = 'none';
  document.getElementById('generation-success-ui').style.display = 'none';
  document.getElementById('btn-next-step').style.display = 'inline-flex';
  document.getElementById('btn-next-step').textContent = 'Pokračovat';
}

// Navigace mezi kroky wizardu
function goToStep(step) {
  currentStep = step;
  
  // Skrýt všechny kroky
  document.querySelectorAll('.wizard-step').forEach(s => s.style.display = 'none');
  
  // Zobrazit aktivní
  document.getElementById(`step-${step}`).style.display = 'flex';
  
  // Aktualizace indikátorů navigace
  document.querySelectorAll('.step-indicator').forEach((ind, index) => {
    ind.classList.remove('active', 'completed');
    if (index + 1 === step) {
      ind.classList.add('active');
    } else if (index + 1 < step) {
      ind.classList.add('completed');
    }
  });

  // Tlačítko zpět viditelnost
  const btnPrevStep = document.getElementById('btn-prev-step');
  const btnNextStep = document.getElementById('btn-next-step');

  btnPrevStep.style.visibility = step === 1 ? 'hidden' : 'visible';
  
  if (step === 4) {
    btnNextStep.textContent = 'Vygenerovat web';
  } else {
    btnNextStep.textContent = 'Pokračovat';
  }
}

function openWizard() {
  document.getElementById('wizard-modal').classList.add('active');
  goToStep(1);
}

function closeWizard() {
  document.getElementById('wizard-modal').classList.remove('active');
  loadProjects();
}

// --- ALGORITMUS PRO ZPRACOVÁNÍ FOTEK DO ZASTÁVEK ---

function processPhotosIntoStops(photos) {
  // 1. Vyřadíme fotky bez platného data a času, případně je seřadíme chronologicky
  const sortedPhotos = photos
    .filter(p => p.date)
    .sort((a, b) => a.date.localeCompare(b.date));

  if (sortedPhotos.length === 0) {
    currentProject.points = [];
    return;
  }

  // Pokud není vybrána titulní fotka, automaticky zvolíme první načtenou fotku
  if (!currentProject.coverPhoto && sortedPhotos.length > 0) {
    currentProject.coverPhoto = sortedPhotos[0].path;
    const display = document.getElementById('vac-cover-display');
    const preview = document.getElementById('cover-preview');
    const wrap = document.getElementById('cover-preview-wrap');
    if (display) display.value = sortedPhotos[0].path;
    if (preview) preview.src = `file://${sortedPhotos[0].path}`;
    if (wrap) wrap.style.display = 'block';
  }

  // 2. Seskupení fotek podle geolokace a času
  const points = [];
  let currentStop = null;
  const maxDistance = 500; // metry pro sloučení do jedné zastávky

  sortedPhotos.forEach(photo => {
    if (photo.lat && photo.lon) {
      if (currentStop) {
        // Spočítáme vzdálenost k aktuální zastávce
        const dist = getDistance(currentStop.lat, currentStop.lon, photo.lat, photo.lon);
        if (dist <= maxDistance) {
          // Přidáme fotku k stávající zastávce
          currentStop.photos.push(photo.path);
          // Přepočítáme těžiště souřadnic
          const n = currentStop.photos.length;
          currentStop.lat = ((currentStop.lat * (n - 1)) + photo.lat) / n;
          currentStop.lon = ((currentStop.lon * (n - 1)) + photo.lon) / n;
          return;
        }
      }
      
      // Vytvoříme novou zastávku
      currentStop = {
        name: `Místo pořízení (${photo.name})`,
        type: 'zastávka',
        lat: photo.lat,
        lon: photo.lon,
        description: '',
        date: photo.date,
        photos: [photo.path]
      };
      points.push(currentStop);
    }
  });

  // 3. Rozdělení bodů do jednotlivých dnů podle data
  // Zjistíme unikátní data
  const uniqueDates = [...new Set(points.map(p => p.date))].sort();
  
  // Naplníme dny projektu
  currentProject.days = uniqueDates.map((date, index) => {
    const dObj = new Date(date);
    const options = { weekday: 'long', day: 'numeric', month: 'numeric' };
    const label = dObj.toLocaleDateString('cs-CZ', options);
    
    // Zkusíme přiřadit hezké barvy
    const color = DAY_COLORS[index % DAY_COLORS.length];

    return {
      day: index + 1,
      date: date,
      label: label.charAt(0).toUpperCase() + label.slice(1), // Velké počáteční písmeno
      color: color,
      title: '',
      summary: ''
    };
  });

  // Přiřadíme body dnům a nastavíme pořadí (order)
  currentProject.points = points.map(pt => {
    const dayObj = currentProject.days.find(d => d.date === pt.date);
    const dayNum = dayObj ? dayObj.day : 1;
    
    return {
      day: dayNum,
      order: 1, // Pořadí v rámci dne bude dopočítáno
      name: pt.name,
      type: pt.type,
      lat: pt.lat,
      lon: pt.lon,
      description: pt.description,
      photos: pt.photos
    };
  });

  // Dopočítat pořadí (order) v jednotlivých dnech
  currentProject.days.forEach(d => {
    const dayPts = currentProject.points.filter(p => p.day === d.day);
    dayPts.forEach((p, idx) => {
      p.order = idx + 1;
    });
  });
}

// Vykreslení editoru zastávek v Kroku 3
function renderStopsEditor() {
  const container = document.getElementById('stops-container');
  container.innerHTML = '';

  if (currentProject.points.length === 0) {
    container.innerHTML = '<p style="color: var(--text-secondary); text-align: center; padding: 20px;">Žádné fotky s GPS souřadnicemi nebyly nalezeny.</p>';
    return;
  }

  currentProject.points.forEach((pt, idx) => {
    const dayObj = currentProject.days.find(d => d.day === pt.day) || { label: `Den ${pt.day}`, color: '#2563eb' };
    const item = document.createElement('div');
    item.className = 'stop-item';
    item.style.borderLeft = `6px solid ${dayObj.color}`;
    
    // Zobrazení náhledů fotek u tohoto bodu
    let photosHtml = '';
    pt.photos.forEach(ph => {
      photosHtml += `<img src="file://${ph}" alt="foto">`;
    });

    item.innerHTML = `
      <div class="stop-header">
        <span style="background-color: ${dayObj.color}; color: white; padding: 2px 8px; border-radius: 99px; font-size: 11px; font-weight: 700;">
          ${dayObj.label} (Zastávka ${pt.order})
        </span>
        <div style="display: flex; gap: 8px;">
          <select id="stop-type-${idx}">
            <option value="zastávka" ${pt.type === 'zastávka' ? 'selected' : ''}>📍 Zastávka</option>
            <option value="památka" ${pt.type === 'památka' ? 'selected' : ''}>🏛️ Památka</option>
            <option value="ubytování" ${pt.type === 'ubytování' ? 'selected' : ''}>🛏️ Ubytování</option>
            <option value="přílet" ${pt.type === 'přílet' ? 'selected' : ''}>✈️ Přílet/Odlet</option>
            <option value="výlet" ${pt.type === 'výlet' ? 'selected' : ''}>🥾 Výlet</option>
          </select>
        </div>
      </div>
      <div class="stop-details">
        <div class="form-group">
          <label>Název místa</label>
          <input type="text" id="stop-name-${idx}" value="${esc(pt.name)}">
        </div>
        <div class="form-group">
          <label>Souřadnice</label>
          <input type="text" readonly value="${pt.lat.toFixed(5)}, ${pt.lon.toFixed(5)}">
        </div>
      </div>
      <div class="form-group">
        <label>Zápisky / Informace o místě</label>
        <textarea id="stop-desc-${idx}" rows="2" placeholder="Napište poznámky nebo nechte stáhnout z Wikipedie...">${esc(pt.description || '')}</textarea>
      </div>
      <div class="stop-photos-preview">
        ${photosHtml}
      </div>
    `;
    container.appendChild(item);
  });
}

// Uložení hodnot z UI editoru zastávek zpět do objektu
function saveStopsFromEditor() {
  currentProject.points.forEach((pt, idx) => {
    const inputName = document.getElementById(`stop-name-${idx}`);
    const selectType = document.getElementById(`stop-type-${idx}`);
    const textDesc = document.getElementById(`stop-desc-${idx}`);

    if (inputName) pt.name = inputName.value.trim();
    if (selectType) pt.type = selectType.value;
    if (textDesc) pt.description = textDesc.value.trim();
  });
}

// Automatické generování přehledu dnů (Days)
function generateDaysSummary() {
  currentProject.days.forEach(d => {
    const dayPts = currentProject.points.filter(p => p.day === d.day);
    
    // Titulek dne: spojíme názvy prvních tří míst oddělené pomlčkou
    if (!d.title) {
      const names = dayPts.slice(0, 3).map(p => p.name.replace(/Místo pořízení \(.+\)/, 'Zastávka'));
      d.title = names.join(' – ') || 'Program dne';
    }
    
    // Popis dne: spojíme stručné informace
    if (!d.summary) {
      const summaries = dayPts.filter(p => p.description).map(p => p.description);
      d.summary = summaries.join(' ') || 'Fotovýlet a objevování okolí.';
    }
  });
}

// --- POMOCNÉ FUNKCE ---

// Výpočet vzdálenosti mezi GPS body (Haversine formula)
function getDistance(lat1, lon1, lat2, lon2) {
  const R = 6371e3; // Poloměr Země v metrech
  const phi1 = lat1 * Math.PI / 180;
  const phi2 = lat2 * Math.PI / 180;
  const deltaPhi = (lat2 - lat1) * Math.PI / 180;
  const deltaLambda = (lon2 - lon1) * Math.PI / 180;

  const a = Math.sin(deltaPhi / 2) * Math.sin(deltaPhi / 2) +
            Math.cos(phi1) * Math.cos(phi2) *
            Math.sin(deltaLambda / 2) * Math.sin(deltaLambda / 2);
  const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

  return R * c; // Vzdálenost v metrech
}

// Escape HTML
function esc(str) {
  if (!str) return '';
  return String(str)
    .replace(/&/g, '&amp;')
    .replace(/</g, '&lt;')
    .replace(/>/g, '&gt;')
    .replace(/"/g, '&quot;')
    .replace(/'/g, '&#039;');
}

// Převod základního Markdownu (z HELP.md) na HTML
function markdownToHtml(markdown) {
  if (!markdown) return '';
  const lines = markdown.split('\n');
  let html = '';
  let inList = false;

  for (let line of lines) {
    const trimmed = line.trim();
    if (!trimmed) {
      if (inList) {
        html += '</ul>';
        inList = false;
      }
      continue;
    }

    // Nadpisy
    if (trimmed.startsWith('### ')) {
      if (inList) { html += '</ul>'; inList = false; }
      html += `<h3>${trimmed.substring(4)}</h3>`;
    } else if (trimmed.startsWith('## ')) {
      if (inList) { html += '</ul>'; inList = false; }
      html += `<h2>${trimmed.substring(3)}</h2>`;
    } else if (trimmed.startsWith('# ')) {
      if (inList) { html += '</ul>'; inList = false; }
      html += `<h1>${trimmed.substring(2)}</h1>`;
    }
    // Odrážky
    else if (trimmed.startsWith('- ') || trimmed.startsWith('* ')) {
      if (!inList) {
        html += '<ul>';
        inList = true;
      }
      let content = trimmed.substring(2);
      content = content.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
      content = content.replace(/\*(.*?)\*/g, '<em>$1</em>');
      html += `<li>${content}</li>`;
    }
    // Odstavce
    else {
      if (inList) { html += '</ul>'; inList = false; }
      let content = trimmed;
      content = content.replace(/\*\*(.*?)\*\*/g, '<strong>$1</strong>');
      content = content.replace(/\*(.*?)\*/g, '<em>$1</em>');
      html += `<p>${content}</p>`;
    }
  }
  if (inList) {
    html += '</ul>';
  }
  return html;
}

// --- AUTOMATICKÉ DOPLŇOVÁNÍ GEOLOKACE A WIKIPEDIE ---

// Pomocná funkce pro zpoždění (sleep)
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));

// Pomocná funkce pro získání hezkého názvu z Nominatimu
function getCleanName(res) {
  if (!res) return null;
  
  // Pokud existuje přímo specifický název v odpovědi
  if (res.name) return res.name;
  
  const addr = res.address;
  if (addr) {
    // Vytáhnout nejvýznamnější bod zájmu (POI)
    const poi = addr.tourism || addr.historic || addr.attraction || addr.museum || addr.monument ||
                addr.castle || addr.fortress || addr.archaeological || addr.amenity || addr.leisure ||
                addr.natural || addr.shop || addr.place;
    if (poi) return poi;
    
    // Pokud není POI, ale je to silnice/ulice s případným číslem popisnám
    if (addr.road) {
      if (addr.house_number) {
        return `${addr.road} ${addr.house_number}`;
      }
      return addr.road;
    }
    
    // Město, obec
    const place = addr.city || addr.town || addr.village || addr.hamlet || addr.suburb;
    if (place) return place;
  }
  
  // Výchozí fallback z celého názvu
  if (res.display_name) {
    return res.display_name.split(',')[0].trim();
  }
  
  return null;
}

// Spustí na pozadí doplňování geolokace a Wikipedie pro všechny body
async function startBackgroundEnrichment() {
  for (let i = 0; i < currentProject.points.length; i++) {
    const pt = currentProject.points[i];
    if (pt.lat && pt.lon) {
      // 1. Zpoždění 1 sekunda pro splnění rate-limitu Nominatim API (1 req/s)
      await sleep(1000);
      
      try {
        const geoRes = await window.api.reverseGeocode(pt.lat, pt.lon);
        const cleanName = getCleanName(geoRes);
        if (cleanName) {
          pt.name = cleanName;
          
          // Pokud je editor zobrazený, aktualizujeme pole v UI
          const inputName = document.getElementById(`stop-name-${i}`);
          if (inputName) inputName.value = cleanName;
        }
      } catch (err) {
        console.error('Chyba při reverse geocodingu:', err);
      }

      // 2. Wikipedia Geosearch
      try {
        const wiki = await window.api.wikipediaGeosearch(pt.lat, pt.lon);
        if (wiki) {
          pt.name = wiki.title;
          pt.description = wiki.summary;
          
          // Aktualizovat UI
          const inputName = document.getElementById(`stop-name-${i}`);
          const textDesc = document.getElementById(`stop-desc-${i}`);
          if (inputName) inputName.value = wiki.title;
          if (textDesc) textDesc.value = wiki.summary;
        }
      } catch (err) {
        console.error('Chyba při vyhledávání na Wikipedii:', err);
      }
    }
  }
}

// Translations database and functions moved to top of file


