from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
import re

# Configuración de Selenium
chrome_options = Options()
chrome_options.add_argument("--headless")  # Ejecutar en modo headless
chrome_options.add_argument("--disable-dev-shm-usage")  # Prevenir problemas de memoria compartida
chrome_options.add_argument("--no-sandbox")  # Requerido en entornos root/VPS
chrome_options.add_argument("--disable-gpu")  # Opcional: prevenir errores gráficos
chrome_options.add_argument("--remote-debugging-port=9222")  # Necesario para evitar problemas de DevToolsActivePort

# Ruta de Chromedriver en Ubuntu
service = Service('/usr/bin/chromedriver')  # Asegúrate de que Chromedriver está en esta ruta
driver = webdriver.Chrome(service=service, options=chrome_options)


# URL de la página
url = 'https://optionstrat.com/nwxvYzV1tsKy'
driver.get(url)


try:
    # Abrir el modal de posiciones
    modal_button = WebDriverWait(driver, 15).until(
        EC.element_to_be_clickable((By.XPATH, "//button[contains(@class, 'button--small') and contains(text(), 'Positions')]"))
    )
    modal_button.click()
    print("Modal abierto.")

    # Esperar hasta que se carguen las posiciones
    positions = []
    max_retries = 3  # Número máximo de reintentos
    retries = 0

    while retries < max_retries:
        try:
            # Intentar cargar las posiciones
            positions_elements = WebDriverWait(driver, 15).until(
                EC.presence_of_all_elements_located((By.CLASS_NAME, "PositionList_item__vDwiz"))
            )
            if len(positions_elements) > 0:
                print(f"Posiciones encontradas ({len(positions_elements)}):")
                break
        except Exception as e:
            print(f"Intento {retries + 1}/{max_retries} fallido para cargar posiciones.")
            retries += 1

    if retries == max_retries:
        print("No se pudieron cargar las posiciones después de varios intentos.")
        raise Exception("No se pudieron cargar las posiciones.")

    # Procesar cada posición
    for index, position in enumerate(positions_elements, start=1):
        try:
            # Esperar que los detalles estén presentes
            details_element = WebDriverWait(position, 5).until(
                EC.presence_of_element_located((By.CLASS_NAME, "PositionList_item__open__ri52K"))
            )
            details = details_element.text.strip() if details_element else "N/A"

            # Extraer el precio si está disponible
            price = "N/A"
            if "at" in details:
                price = details.split("at")[-1].strip()

            # Validar y agregar la posición al resultado
            if details != "N/A":
                positions.append(f"Posición {index}: Detalles: {details}, Precio: {price}")
            else:
                positions.append(f"Posición {index}: Detalles: N/A, Precio: N/A")
        except Exception as e:
            print(f"Error procesando la posición {index}: {e}")
            positions.append(f"Posición {index}: Detalles: N/A, Precio: N/A")

    # Imprimir posiciones procesadas
    for pos in positions:
        print(pos)

except Exception as e:
    print(f"Error: {e}")


finally:
    driver.quit()
