import os
import time
import datetime
import pyautogui
import pygetwindow as gw
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options

# === CONFIGURACIÓN INICIAL ===
fecha_descarga = datetime.datetime.now().strftime("%Y%m%d")
carpeta_salida = os.path.join(os.path.expanduser("~"), "Desktop", f"Nominas_AFIP_{fecha_descarga}")
os.makedirs(carpeta_salida, exist_ok=True)

chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
driver = webdriver.Chrome(service=Service(), options=chrome_options)

print("📌 Esperando que cargue el combo de CUILs de AFIP...")
try:
    combo = WebDriverWait(driver, 30).until(
    EC.presence_of_element_located((By.ID, "ctl00_ContentPlaceHolder1_dllEditarCuil1"))
)
    print("✅ Combo de CUILs encontrado correctamente.")
except Exception as e:
    print("❌ No se encontró el combo de CUILs.")
    print(f"📋 Detalle técnico: {e}")
    print("👉 Verificá que estés en la pantalla de AFIP donde aparece el combo.")
    input("⏸️ Presioná Enter para cerrar...")
    driver.quit()
    exit()

opciones = combo.find_elements(By.TAG_NAME, "option")
print(f"🔍 Se detectaron {len(opciones)} CUILs. Iniciando descarga automática...")

def imprimir_y_guardar(nombre_archivo):
    for w in gw.getWindowsWithTitle(' - Google Chrome'):
        w.activate()
        break

    time.sleep(1)
    pyautogui.hotkey('ctrl', 'p')
    time.sleep(3)

    pyautogui.press('enter')
    time.sleep(3)

    ruta_completa = os.path.join(carpeta_salida, nombre_archivo)
    pyautogui.write(ruta_completa, interval=0.02)
    time.sleep(1)

    pyautogui.press('enter')
    print(f"✅ Guardado: {ruta_completa}")
    time.sleep(2)

for i in range(len(opciones)):
    try:
        combo = driver.find_element(By.ID, "ctl00_ContentPlaceHolder1_dllEditarCuil1")
        opciones = combo.find_elements(By.TAG_NAME, "option")

        valor = opciones[i].get_attribute("value")
        texto = opciones[i].text

        if not valor.strip():
            continue

        print(f"📄 Descargando CUIL {texto}...")
        Select(combo).select_by_index(i)
        time.sleep(2)

        nombre_pdf = f"{valor}_{fecha_descarga}.pdf"
        imprimir_y_guardar(nombre_pdf)
        time.sleep(2)

    except Exception as e:
        print(f"⚠️ Error en CUIL {i + 1}: {e}")
        continue

print("✅ Descarga finalizada.")
driver.quit()