/**
 * Wo die Oberfläche liegt – eine einzige Quelle für Fenster und Sperre.
 *
 * `fenster.ts` lädt diese Datei, `sicherheit.ts` lässt genau sie als
 * Navigationsziel zu. Stünde der Pfad an beiden Stellen, könnten sie
 * auseinanderlaufen – und zwar in die gefährliche Richtung: Die Sperre
 * verböte dann entweder die eigene Seite oder ließe eine fremde durch.
 */

import { join } from 'node:path';
import { pathToFileURL } from 'node:url';

/**
 * Pfad der gebauten `index.html`.
 *
 * Relativ zum Ausgabeverzeichnis des Main-Prozesses (`out/main`), in das
 * electron-vite dieses Modul bündelt.
 */
export function oberflaechenDatei(): string {
  return join(__dirname, '../renderer/index.html');
}

/** Dieselbe Datei als `file:`-URL, wie Electron sie beim Laden erzeugt. */
export function oberflaechenUrl(): string {
  return pathToFileURL(oberflaechenDatei()).href;
}

/**
 * Meinen zwei `file:`-URLs dieselbe Datei?
 *
 * Hash und Query bleiben außer Betracht – Sprungziele innerhalb der eigenen
 * Seite sind unbedenklich. Groß- und Kleinschreibung ebenfalls: Unter Windows
 * ist derselbe Pfad unabhängig davon dieselbe Datei, und der
 * Laufwerksbuchstabe kommt nicht immer gleich geschrieben an.
 *
 * Als reine Funktion herausgezogen, damit sie ohne Electron prüfbar ist.
 */
export function istGleicheDatei(ziel: string, eigene: string): boolean {
  try {
    const a = new URL(ziel);
    const b = new URL(eigene);
    if (a.protocol !== 'file:' || b.protocol !== 'file:') {
      return false;
    }
    return (
      decodeURIComponent(a.pathname).toLowerCase() === decodeURIComponent(b.pathname).toLowerCase()
    );
  } catch {
    return false;
  }
}
