# -*- coding: utf-8 -*-
from flask import Flask, request, jsonify, render_template
from selenium.webdriver.firefox.options import Options
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup
from pyvirtualdisplay import Display
import time

# Initialisation de l'application Flask
app = Flask(__name__, static_folder="static", template_folder="templates")

def extract_filtered_vehicle_info(license_plate):
    """Extrait et filtre les informations spécifiques du véhicule."""
    # Démarrer un affichage virtuel avec Xvfb
    display = Display(visible=0, size=(1920, 1080))
    display.start()

    options = Options()
    options.headless = True  # Mode sans affichage
    driver = webdriver.Firefox(options=options)

    try:
        # Accéder à la page de connexion
        driver.get('https://www.vroomly.com/partenaire/connexion/')

        # Gestion des cookies
        try:
            accept_cookies = WebDriverWait(driver, 10).until(
                EC.element_to_be_clickable((By.CSS_SELECTOR, '[data-cy="modal-button-0"]'))
            )
            accept_cookies.click()
        except Exception:
            print("Pas de bouton pour accepter les cookies.")

        # Connexion
        email_field = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.ID, 'login.email'))
        )
        password_field = driver.find_element(By.ID, 'login.password')
        submit_button = driver.find_element(By.CSS_SELECTOR, 'button[data-cy="validate-form"]')

        email_field.send_keys('contact@digitalproreprog.com')
        password_field.send_keys('Coq230313@@')
        submit_button.click()

        # Naviguer vers la page des pièces
        WebDriverWait(driver, 5).until(EC.url_contains('/partenaire/home'))
        driver.get('https://www.vroomly.com/parts/')

        # Entrer la plaque d'immatriculation
        plate_input = WebDriverWait(driver, 5).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, 'input[placeholder="AB-123-CD"]'))
        )
        plate_input.clear()
        plate_input.send_keys(license_plate)

        # Cliquer sur "Rechercher"
        WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.XPATH, '//button[div[text()="Rechercher"]]'))
        ).click()

        # Cliquer sur le bouton "Gérer"
        manage_button = WebDriverWait(driver, 5).until(
            EC.element_to_be_clickable((By.XPATH, '//button[div[text()="Gérer"]]'))
        )
        manage_button.click()

        # Ajouter un délai pour s'assurer que tout le contenu du volet latéral est chargé
        time.sleep(5)

        # Extraire tout le HTML de la page
        page_html = driver.page_source

        # Analyser le HTML avec BeautifulSoup pour extraire les informations spécifiques
        soup = BeautifulSoup(page_html, 'html.parser')
        full_text = soup.get_text(separator='\n').strip()

        # Filtrer les informations entre "Close" et "Changer de véhicule"
        start_marker = "Close"
        end_marker = "Changer de véhicule"
        filtered_text = ""
        if start_marker in full_text and end_marker in full_text:
            start_index = full_text.index(start_marker) + len(start_marker)
            end_index = full_text.index(end_marker)
            filtered_text = full_text[start_index:end_index].strip()

        print(f"Informations filtrées : {filtered_text}")
        return {"status": "success", "vehicle_info": filtered_text}

    except Exception as e:
        return {
            "status": "error",
            "error": f"Erreur lors de l'extraction des informations : {e}"
        }
    finally:
        driver.quit()
        display.stop()

# Routes Flask
@app.route('/')
def index():
    return render_template('index.html')

@app.route('/search', methods=['POST'])
def search():
    license_plate = request.form.get('license_plate', '').strip()
    if not license_plate:
        return jsonify({"error": "Veuillez fournir une plaque d'immatriculation."}), 400

    result = extract_filtered_vehicle_info(license_plate)
    return jsonify(result)

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5006)
