package de.roko.genalogy.downloader.viewer;

import de.roko.genalogy.downloader.archion.ArchionLoginHelper;
import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import net.lightbody.bmp.core.har.HarEntry;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import static org.junit.jupiter.api.Assertions.*;

class ViewerBildParserTest {

    public String username = "robatkoch";
    public String password = "PaLiNa2016$$";

    public ChromeDriver driver;

    @BeforeAll
    static void setUp() {

        String userHome = System.getProperty("user.home");
        String downloadFolder = userHome + "/Pictures/archion";
        new File(downloadFolder).mkdirs();


    }

    @BeforeEach
    void login() throws InterruptedException {
/*
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--remote-allow-origins=*");

        // WebDriver starten
        driver = new ChromeDriver(options);

        ArchionLoginHelper archionLoginHelper = new ArchionLoginHelper(driver);
        archionLoginHelper.login(username, password);
        //assertFalse(archionLoginHelper.isLoggedIn(), "Login nicht möglich");
*/
    }

    @Test
    void parse() throws InterruptedException {

        String viewerUrl = "https://www.archion.de/de/viewer/churchRegister/287040?cHash=c61b3fc9f95353f6ba795fe0b90b3288";

        // Proxy starten
        BrowserMobProxy proxy = new BrowserMobProxyServer();
        proxy.start(0); // auf freiem Port starten

        // Proxy in Selenium einbinden
        Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
        ChromeOptions options = new ChromeOptions();
        options.setProxy(seleniumProxy);
        options.addArguments("--start-maximized");

        WebDriver driver = new ChromeDriver(options);

        // HAR-Protokoll starten
        proxy.newHar("archion-view");

        // Viewer-URL aufrufen (muss eingeloggt sein!)
        ArchionLoginHelper archionLoginHelper = new ArchionLoginHelper(driver);
        archionLoginHelper.login(username, password);
        driver.get(viewerUrl);

        // Warten und Seiten durchblättern (optional)
        for (int i = 0; i < 10; i++) {
            try {
                Thread.sleep(1500);
                WebElement next = driver.findElement(By.cssSelector("a.dvnavnext"));
                if (next != null && next.isDisplayed()) {
                    next.click();
                } else {
                    break;
                }
            } catch (Exception e) {
                break; // Ende erreicht oder Fehler
            }
        }

        // Alle Bild-URLs auslesen
        List<String> imageUrls = new ArrayList<>();
        for (HarEntry entry : proxy.getHar().getLog().getEntries()) {
            String url = entry.getRequest().getUrl();
            if (url.contains("/si/") && url.endsWith("/image.jpg")) {
                imageUrls.add(url);
            }
        }

        // Ausgabe
        System.out.println("\n🔍 Gefundene Bild-URLs:");
        for (int i = 0; i < imageUrls.size(); i++) {
            System.out.printf("Bild %03d: %s%n", i + 1, imageUrls.get(i));
        }

        // Aufräumen
        driver.quit();
        proxy.stop();
    }
}