import csv, time, os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup

OUTPUT_FILE = "dyno_test.csv"

FIELD_MAP = {
    "Type of fuel": "Fuel",
    "Fuel type": "Fuel",
    "Method": "Method",
    "Tuning type": "Tuning",
    "Cylinder content": "Cylinder",
    "Engine number": "Engine Number",
    "Engine ECU": "ECU",
    "Engine Control Unit": "ECU",
    "Compression ratio": "Compression",
    "Bore X stroke": "BoreXStroke",
}

def get_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--headless=new")
    options.add_argument("--disable-gpu")
    options.add_argument("--no-sandbox")
    return webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

def scrape():
    driver = get_driver()

    # Init CSV
    with open(OUTPUT_FILE, "w", newline="", encoding="utf-8-sig") as f:
        writer = csv.writer(f, delimiter=";")
        writer.writerow([
            "Make", "Model", "Generation", "Engine",
            "Fuel", "ECU", "Engine Number", "Cylinder",
            "Compression", "BoreXStroke", "HP Stock", "HP Tuned",
            "Torque Stock", "Torque Tuned"
        ])

    brand = "Alfa Romeo"
    model = "147"
    url = "https://www.dyno-chiptuningfiles.com/chiptuning-file/alfa-romeo-147-16-t-spark-105hp-3655/"

    driver.get(url)
    time.sleep(2)

    soup = BeautifulSoup(driver.page_source, "html.parser")

    # 🔹 Extraire génération via breadcrumb
    breadcrumb = soup.select("div.breadcrumbs a")
    generation = ""
    if breadcrumb:
        if len(breadcrumb) >= 4:
            generation = breadcrumb[-1].get_text(strip=True)

    # --- Specs moteur ---
    details = {}
    for row in soup.select(".chiptuning-files-results-specs table tr"):
        cols = row.find_all("td")
        if len(cols) == 2:
            key = cols[0].get_text(strip=True)
            val = cols[1].get_text(strip=True)
            details[FIELD_MAP.get(key, key)] = val

    # --- HP & Torque ---
    def extract_value(block, label):
        row = block.find("div", string=label)
        if row and row.find_next_sibling("div"):
            return row.find_next_sibling("div").get_text(strip=True).split()[0]
        return ""

    hp_block = soup.find("h3", string="Power hp").find_parent("div")
    tq_block = soup.find("h3", string="Torque Nm").find_parent("div")

    hp_stock = extract_value(hp_block, "Original") if hp_block else ""
    hp_tuned = extract_value(hp_block, "Dyno Chiptuning") if hp_block else ""
    tq_stock = extract_value(tq_block, "Original") if tq_block else ""
    tq_tuned = extract_value(tq_block, "Dyno Chiptuning") if tq_block else ""

    row = [
        brand, model, generation, "1.6 T Spark 105hp",
        details.get("Fuel", ""), details.get("ECU", ""), details.get("Engine Number", ""),
        details.get("Cylinder", ""), details.get("Compression", ""), details.get("BoreXStroke", ""),
        hp_stock, hp_tuned, tq_stock, tq_tuned
    ]

    print("   CSV:", row)

    with open(OUTPUT_FILE, "a", newline="", encoding="utf-8-sig") as f:
        csv.writer(f, delimiter=";").writerow(row)

    driver.quit()
    print(f"\n✅ Test terminé → voir {OUTPUT_FILE}")

if __name__ == "__main__":
    scrape()
