import time
import json
from datetime import datetime
import gspread
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from oauth2client.service_account import ServiceAccountCredentials

# Configuration Selenium
chrome_options = Options()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument(
    "user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"
)

# Chemin vers ChromeDriver
service = Service("C:/Users/Ets Jeudy - NB/Desktop/Agritel/chromedriver-win64/chromedriver.exe")  
driver = webdriver.Chrome(service=service, options=chrome_options)

# Accéder à la page des cotations
url = "https://www.agritel.com/fr/quotes"
driver.get(url)

# Attendre le chargement initial des tableaux
wait = WebDriverWait(driver, 30)
wait.until(EC.presence_of_element_located((By.TAG_NAME, "table")))

# Connexion à Google Sheets
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name("credentials.json", scope)
client = gspread.authorize(creds)
sheet = client.open("Agritel").worksheet("MATIF")

# Fonction pour extraire les données
def get_table_data(driver):
    tables = driver.find_elements(By.TAG_NAME, "table")
    target_tables = {
        1: "Blé (€/t)",
        2: "Maïs (€/t)",
        3: "Colza (€/t)"
    }

    selected_data = {}

    for index, label in target_tables.items():
        try:
            table = tables[index]
            rows = table.find_elements(By.TAG_NAME, "tr")
            table_data = []

            for row in rows:
                cells = row.find_elements(By.TAG_NAME, "td")
                row_data = [cells[i].text.strip() if i < len(cells) else "" for i in [0, 8, 9]]
                if "-" not in row_data and any(row_data):
                    table_data.append(row_data)

            if table_data:
                selected_data[label] = table_data
        except Exception as e:
            print(f"❌ Erreur lors de la récupération du tableau {label}: {e}")
    
    return selected_data

# Fonction d’écriture dans Google Sheets
def write_to_google_sheets(data):
    row_index = 1
    for title, table_data in data.items():
        sheet.insert_row([""], row_index)
        row_index += 1
        sheet.insert_row([title], row_index)
        row_index += 1
        for row in table_data:
            sheet.insert_row(row, row_index)
            row_index += 1
        sheet.insert_row([""], row_index)
        row_index += 1

# Surveillance continue
previous_data = None

print("🔄 Surveillance en cours (Ctrl+C pour arrêter)...")

while True:
    try:
        current_data = get_table_data(driver)

        if current_data != previous_data:
            print("🔔 Données modifiées, mise à jour...")

            # Sauvegarder en JSON
            with open("data_filtered.json", "w", encoding="utf-8") as json_file:
                json.dump(current_data, json_file, ensure_ascii=False, indent=4)

            # Effacer et écrire dans Google Sheets
            sheet.clear()
            write_to_google_sheets(current_data)

            # Mettre la date et l'heure dans A1
            now = datetime.now().strftime("%d/%m/%Y %H:%M:%S")
            sheet.update_acell("A1", f"Dernière mise à jour : {now}")

            previous_data = current_data
        else:
            print("✅ Pas de changement. Nouvelle vérification dans 5 minutes.")
    except Exception as e:
        print(f"❌ Erreur dans la boucle principale : {e}")

    time.sleep(300)  # Attendre 5 minutes
