
package de.roko.genalogy.downloader.viewer;

import org.openqa.selenium.*;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;
import java.util.ArrayList;
import java.util.List;

public class ViewerBildParser {

    public record BildInfo(int seite, String bildUrl) {}

    public String resolveViewerRedirect(WebDriver driver, String viewerUrl) {
        driver.get(viewerUrl);

        try {
            Thread.sleep(1000);

            boolean keinZugang = driver.getPageSource().contains("Kein Zugang zum Viewer");

            if (keinZugang) {
                System.out.println("🔐 Kein Zugang – Weiterleitung wird ausgelöst ...");

                WebElement loginButton = new WebDriverWait(driver, Duration.ofSeconds(5))
                        .until(ExpectedConditions.elementToBeClickable(
                                By.cssSelector("a.btn.btn-primary[href*='/de/login']")));

                loginButton.click();

                new WebDriverWait(driver, Duration.ofSeconds(10))
                        .until(d -> d.getCurrentUrl().contains("/viewer/churchRegister/"));

                String redirectedUrl = driver.getCurrentUrl();
                System.out.println("✅ Weitergeleitet zum Viewer: " + redirectedUrl);
                return redirectedUrl;
            }

            System.out.println("✅ Direktzugriff auf Viewer ohne Zwischenseite.");
            return driver.getCurrentUrl();

        } catch (Exception e) {
            System.err.println("❌ Fehler bei der Weiterleitung: " + e.getMessage());
            return viewerUrl;
        }
    }

    public List<BildInfo> extractBildUrlsWithSelenium(WebDriver driver) {
        List<BildInfo> bilder = new ArrayList<>();
        try {
            List<WebElement> seiten = driver.findElements(By.cssSelector(".dvpages .dvpage img[data-src]"));

            int seiteNr = 1;
            for (WebElement img : seiten) {
                String relativeUrl = img.getAttribute("data-src");
                if (relativeUrl == null || relativeUrl.isBlank()) continue;

                String fullUrl = "https://www.archion.de" + relativeUrl.split("\\?")[0];
                bilder.add(new BildInfo(seiteNr++, fullUrl));
            }

            System.out.println("✅ " + bilder.size() + " Bild-URLs extrahiert.");
        } catch (Exception e) {
            System.err.println("❌ Fehler beim Extrahieren der Bilder: " + e.getMessage());
        }

        return bilder;
    }
}
