package de.roko.genalogy.downloader.archion;

import org.openqa.selenium.By;
import org.openqa.selenium.TimeoutException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import java.time.Duration;

public class ArchionLoginHelper {


    private final WebDriver driver;
    private final WebDriverWait wait;
    private boolean loggedIn;

    public ArchionLoginHelper(WebDriver driver) {
        this.driver = driver;
        this.wait = new WebDriverWait(driver, Duration.ofSeconds(10));
    }

    public void login(String username, String password) {

        // Seite aufrufen
        driver.get("https://www.archion.de/de/");


        // "Anmelden"-Link per Attribut (title="Anmelden") finden
        WebElement loginLink = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a[title='Anmelden']")));
        loginLink.click();

        // Eingabefelder finden und ausfüllen
        WebElement emailField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("user")));
        WebElement passwordField = wait.until(ExpectedConditions.visibilityOfElementLocated(By.name("pass")));

        emailField.sendKeys(username);
        passwordField.sendKeys(password);

        // Login-Button klicken
        WebElement submitButton = wait.until(
                ExpectedConditions.elementToBeClickable(By.name("submit"))
        );
        // Klick auf den Button "Anmelden"
        submitButton.click();

        System.out.println("Login abgeschlossen. Aktuelle URL: " + driver.getCurrentUrl());

    }

    public boolean isLoggedIn() {
        try {
            // Eventuell Dropdown öffnen, wenn nötig:
            WebElement kontoDropdownToggle = wait.until(ExpectedConditions.elementToBeClickable(
                    By.cssSelector("a.nav-link.dropdown-toggle[href='#'], a.nav-link.dropdown-toggle.show")));
            kontoDropdownToggle.click();

            // Warte auf Eintrag "Konto-Übersicht"
            WebElement kontoUebersicht = wait.until(ExpectedConditions.visibilityOfElementLocated(
                    By.cssSelector("a[href*='/konto-uebersicht']")));

            System.out.println("✅ Menüeintrag 'Konto-Übersicht' gefunden.");
            loggedIn = kontoUebersicht.isDisplayed();
            return kontoUebersicht.isDisplayed();
        } catch (TimeoutException e) {
            System.out.println("❌ Menüeintrag 'Konto-Übersicht' nicht sichtbar.");
            loggedIn = false;
            return false;
        }
    }

    public void openAlleArchive() {
        WebElement alleArchiveLink = wait.until(
                ExpectedConditions.elementToBeClickable(By.linkText("Alle Archive"))
        );
        alleArchiveLink.click();

        wait.until(ExpectedConditions.urlContains("/de/alle-archive"));
        System.out.println("✅ Seite 'Alle Archive' geöffnet.");
    }

}
