import time
import random
import undetected_chromedriver as uc
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager


def wait_random(min_seconds, max_seconds, reason=""):
    """Wait for a random amount of time between min_seconds and max_seconds."""
    wait_time = random.uniform(min_seconds, max_seconds)
    print(f"⏳ Attente de {wait_time:.2f} secondes ({reason})...")
    time.sleep(wait_time)

def login_to_dpnature(driver, email, password):
    # print("🌐 Accès à la page de login...")
    driver.get("https://www.dpnature.fr/customer/account/login/")
    wait_random(2, 4, "après ouverture de la page login")

    # print("🧾 Remplissage des identifiants...")
    driver.find_element(By.ID, "email").send_keys(email)
    wait_random(1, 2, "entre email et mot de passe")
    driver.find_element(By.ID, "pass").send_keys(password)
    wait_random(1, 2, "avant clic login")

    try:
        WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.ID, "send2"))
        ).click()
    except Exception:
        # print("⚠️ Clic échoué avec Selenium, utilisation de JavaScript...")
        driver.execute_script("document.getElementById('send2').click();")

    wait_random(4, 6, "après soumission du formulaire")

def is_logged_in(driver):
    return "customer/account" in driver.current_url

def get_stock_variant_dp_nature(driver, product_url, option_id):
    print(f"🔎 Accès à la page produit : {product_url}")
    driver.get(product_url)
    wait_random(5, 10, "pour chargement JS")

    print(f"🧬 Recherche de la variante option-id={option_id}...")
    try:
        element = driver.find_element(By.CSS_SELECTOR, f"div[option-id='{option_id}']")
        print(f"🔍 HTML de l'élément trouvé : {element.get_attribute('outerHTML')}")

        classes = element.get_attribute("class")
        if "disabled" in classes:
            print(f"❌ Variante {option_id} : rupture")
            return False
        else:
            print(f"✅ Variante {option_id} : en stock")
            return True
    except Exception as e:
        print(f"❌ Variante {option_id} non trouvée : {e}")
        return None

def get_stock_product_without_variant(driver, product_url):
    print(f"🔎 Accès à la page produit : {product_url}")
    driver.get(product_url)
    wait_random(5, 10, "pour chargement JS")
    try:
        availability_meta = driver.find_element(By.XPATH, "//meta[@property='product:availability']")
        availability_content = availability_meta.get_attribute("content")
        print(f"🔍 HTML de l'élément trouvé : {availability_meta.get_attribute('outerHTML')}")


        if availability_content == "in stock":
            print(f"✅ Produit disponible : {product_url}")
            return True
        else:
            print(f"❌ Produit non disponible : {product_url}")
            return False
    except Exception as e:
        print(f"❌ Erreur lors de la récupération de l'état de stock : {e}")
        return None

def initialize_driver():
    options = uc.ChromeOptions()
    options.add_argument("--headless")
    options.add_argument("--disable-blink-features=AutomationControlled")
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")
    options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64)...")
    
    driver = uc.Chrome(options=options, version_main=137)
    return driver
