from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import re

def scrape(driver, url):
    driver.get(url)

    try:
        WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, '[role="listitem"]'))
        )
        print("✅ Google Form content loaded.")
    except:
        print("⚠️ Timed out waiting for product cards.")

    time.sleep(2)  # Let everything load
    soup = BeautifulSoup(driver.page_source, 'html.parser')
    cards = soup.select('[role="listitem"]')
    items = []

    for card in cards:
        # Find product title using [role="heading"] span
        heading = card.select_one('[role="heading"] span')
        if not heading:
            continue
        
        name_full = heading.get_text(strip=True)

        if "quantity" not in name_full.lower():
            continue  # Skip non-product items

        name = name_full
        price = None

        if '-' in name_full and '$' in name_full:
            try:
                name_part, price_part = name_full.split('-', 1)
                name = name_part.strip()
                # Extract up to first space or (
                raw_price = price_part.strip().lstrip('$')
                raw_price = raw_price.split()[0].split('(')[0]
                price = f"${raw_price}"
            except ValueError:
                pass

        # Get image
        img_tag = card.find('img')
        image = img_tag['src'] if img_tag and img_tag.has_attr('src') else None

        items.append({
            "name": name,
            "price": price,
            "image": image
        })

    return items