from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
#from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By

# c:\Users\facturador\sel\leads-meta-to-flexa.py 1961501047702863 10004936
# c:\Users\facturador\sel\leads-meta-to-flexa.py 593394476659188 10005115
# 1389891909046774  Colonia
# 980693947497692 Distrito
# 1312070813351219 Q B Belgrano -
# 593394476659188 Brava 30 - Punta del Este - OK HAY LEADS CONSTANTES
# 1961501047702863  Brava 30: NO MAS LEADS DESDE EL 28/02 !!
# 869710271968871 La Brava:  0 LEADS!

import json, os, requests, glob, time, sys, tempfile

# Variables
metaformid = sys.argv[1]  # Ejemplo: '1961501047702863'
begincsv = 'Brava'
#jobid = sys.argv[2]       # Ejemplo: '10004936'
jobid = sys.argv[2] if len(sys.argv) > 2 else "0"


download_dir = "/root/Downloads"
if not os.path.exists(download_dir):
    os.makedirs(download_dir)

# Configurar opciones de Chrome (Chromium) para modo headless
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")

# Crear un directorio temporal único para user-data-dir
#user_data_dir = tempfile.mkdtemp(prefix="chrome_data_")
#chrome_options.add_argument(f"--user-data-dir={user_data_dir}")

#chrome_options.add_argument("--disable-extensions")
#chrome_options.add_argument("--disable-setuid-sandbox")
chrome_options.add_argument("--remote-debugging-port=9222")
'''
chrome_options.add_experimental_option("prefs", {
    "download.default_directory": download_dir,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
})
'''

# Establecer un directorio de usuario (recomendado al ejecutar como root)
#chrome_options.add_argument("--user-data-dir=/tmp/chrome-data")
chrome_options.binary_location = '/snap/bin/chromium'

#service = Service(ChromeDriverManager().install())
service = Service("/usr/local/bin/chromedriver")

driver = webdriver.Chrome(service=service, options=chrome_options)

params = {"behavior": "allow", "downloadPath": download_dir}
driver.execute_cdp_cmd("Page.setDownloadBehavior", params)


def saveCookies(driver, name):
    # Guarda las cookies en un archivo JSON
    cookies = driver.get_cookies()
    with open('cookies-' + name + '.json', 'w') as file:
        json.dump(cookies, file)
    print('Nuevas cookies guardadas correctamente')

def loadCookies(name):
    # Carga las cookies desde un archivo JSON
    if 'cookies-' + name + '.json' in os.listdir():
        with open('cookies-' + name + '.json', 'r') as file:
            cookies = json.load(file)
        print("Cargando cookies desde cookies-" + name + ".json")
        for cookie in cookies:
            print(cookie)
            driver.add_cookie(cookie)
    else:
        print('No se encontró el archivo de cookies')
    driver.refresh()  # Refresca el navegador después de cargar las cookies

def wait_for_download(path, timeout=30):
    """Wait for a file to appear in the download directory."""
    seconds = 0
    while seconds < timeout:
        files = os.listdir(path)
        # Check for CSV files (or your expected file extension)
        if any(f.endswith(".csv") for f in files):
            return True
        time.sleep(1)
        seconds += 1
    return False


# Acceder a Facebook y cargar cookies
loginURL = 'https://facebook.com/'
driver.get(loginURL)
loadCookies('facebook')

time.sleep(5)

# Descargar Leads
print('Descargando leads...')
leadsURL = 'https://www.facebook.com/ads/lead_gen/export_csv/?id=' + metaformid + '&type=form'
driver.get(leadsURL)
print('Leads descargados')
time.sleep(5)

# Para depurar, imprime el contenido de la página de descarga (opcional)
#print(driver.page_source)

# Verificar archivos descargados
#downloaded_files = os.listdir(download_dir)
#print("Archivos en {}: {}".format(download_dir, downloaded_files))
#if wait_for_download(download_dir):
#    print("El archivo CSV se ha descargado correctamente.")
#else:
#    print("No se detectó el archivo CSV en el tiempo esperado.")

'''
driver.get("chrome://downloads/")
manager = driver.find_element(By.CSS_SELECTOR, "downloads-manager")
item = manager.find_element(By.CSS_SELECTOR, "downloads-item")
shadow = driver.execute_script('return arguments[0].shadowRoot;', item)
link = shadow.find_element(By.CSS_SELECTOR, "div#title-area a")

file_url = link.get_attribute("href")
print("file_url: " + file_url)
'''

# Extract cookies from Selenium
#selenium_cookies = driver.get_cookies()
#session = requests.Session()
#for cookie in selenium_cookies:
#    session.cookies.set(cookie['name'], cookie['value'], domain=cookie.get('domain'))

# Construct the URL for the CSV download
#leadsURL = 'https://www.facebook.com/ads/lead_gen/export_csv/?id=' + metaformid + '&type=form'
#leadsURL = 'https://www.facebook.com/ads/lead_gen/export_csv/?id=1961501047702863&type=form&deoia=1&no_universal_links=1'

# Download the file into memory
#print('Descargando leads de: ' + leadsURL)
#response = session.get(leadsURL)
#if response.status_code == 200:
#    #response.encoding = 'utf-16'
#    csv_text = response.text
#    print("CSV downloaded into memory.")
#    print(csv_text)
#else:
#    print("Error downloading CSV:", response.status_code)
#time.sleep(5)

'''
directory = "/root/Downloads"
# List files and subdirectories
print("Content of " + directory + ":")
for item in os.listdir(directory):
    print(item)

directory = "/tmp/chrome-data"
# List files and subdirectories
print("Content of " + directory + ":")
for item in os.listdir(directory):
    print(item)
'''

# Subir leads a la URL destino (Flexa, en este ejemplo)
url2 = 'https://gestion.argencons.com.ar/argencons/include/csvtodb2.php'

# Ajustar la ruta del archivo para Linux (usa barras diagonales hacia adelante)
file = ''
print(f"Buscando archivos CSV en: {download_dir}")

# Listar todos los archivos en el directorio de descargas
all_files = os.listdir(download_dir)
print(f"Archivos encontrados en {download_dir}: {all_files}")

# Buscar archivos CSV
csv_files = [f for f in all_files if f.endswith('.csv')]
print(f"Archivos CSV encontrados: {csv_files}")

if csv_files:
    # Tomar el archivo CSV más reciente
    csv_files_with_path = [os.path.join(download_dir, f) for f in csv_files]
    file = max(csv_files_with_path, key=os.path.getctime)
    print(f"Archivo CSV más reciente: {file}")
else:
    print("❌ No se encontraron archivos CSV en el directorio de descargas")
    print("Verificando si la descarga fue exitosa...")
    
    # Esperar un poco más y verificar nuevamente
    time.sleep(10)
    all_files = os.listdir(download_dir)
    csv_files = [f for f in all_files if f.endswith('.csv')]
    print(f"Después de esperar - Archivos CSV encontrados: {csv_files}")
    
    if csv_files:
        csv_files_with_path = [os.path.join(download_dir, f) for f in csv_files]
        file = max(csv_files_with_path, key=os.path.getctime)
        print(f"Archivo CSV encontrado después de esperar: {file}")
    else:
        print("❌ Error: No se pudo encontrar ningún archivo CSV descargado")
        print("Verificando contenido de la página de descarga...")
        print("URL de descarga:", leadsURL)
        print("Título de la página:", driver.title)
        driver.quit()
        exit(1)

print("File: " + file)

#if jobid != "0":
if file and os.path.exists(file):
    print("Subiendo archivo " + file)
    
    try:
        headers = {'Content-Type': 'text/plain'}
        data = open(file, 'rt', encoding='utf-16').read()
        response = requests.post(url2 + "?_x=bodyupload", headers=headers, data=data)
        print(response.text)
        #os.remove(file)
        
        print("Subido")
        print("Renombrando")
        print(file)
        new_name = file.replace("Downloads", "Processed").replace(".csv", "-" + metaformid + ".csv")
        print(new_name)
        
        os.rename(file, new_name)
        time.sleep(5)
    except Exception as e:
        print(f"❌ Error al procesar el archivo: {e}")
        driver.quit()
        exit(1)
else:
    print("❌ Error: El archivo no existe o está vacío")
    driver.quit()
    exit(1)


# Actualizar el job de WhatsApp
if jobid != "0":
    print("Actualizando job " + jobid + " de WhatsApp")
    url3 = "https://gestion.argencons.com.ar/argencons/mail/updatemensajewp.php?id=" + jobid + "&formid=" + metaformid
    requests.get(url3)
    print("Actualizado")
    time.sleep(2.5)

# Cierra el navegador
driver.quit()
print('Finalizado ...')
