#!/usr/bin/env python3
"""
TeeOne Scraper using Selenium WebDriver
Compatible with older Python versions
"""

import time
import json
import os
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 selenium.webdriver.chrome.options import Options
from selenium.common.exceptions import TimeoutException, NoSuchElementException

def setup_driver(headless=False):
    """Setup Chrome WebDriver with options"""
    chrome_options = Options()
    
    if headless:
        chrome_options.add_argument('--headless')
    
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--window-size=1920,1080')
    chrome_options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36')
    
    # Try to find ChromeDriver in common locations
    driver_paths = [
        '/usr/bin/chromedriver',
        '/usr/local/bin/chromedriver',
        './chromedriver',
        'chromedriver'
    ]
    
    driver = None
    for path in driver_paths:
        try:
            driver = webdriver.Chrome(executable_path=path, options=chrome_options)
            print(f"✅ ChromeDriver found at: {path}")
            break
        except Exception as e:
            continue
    
    if not driver:
        # Try without specifying path (if chromedriver is in PATH)
        try:
            driver = webdriver.Chrome(options=chrome_options)
            print("✅ ChromeDriver found in PATH")
        except Exception as e:
            print(f"❌ ChromeDriver not found. Error: {e}")
            print("💡 Please install ChromeDriver or add it to PATH")
            return None
    
    return driver

def scrape_teeone():
    """Main scraping function"""
    print("🚀 Starting TeeOne Scraper with Selenium...")
    
    driver = setup_driver(headless=False)
    if not driver:
        return False
    
    try:
        # Step 1: Navigate to login page
        print("🔍 Step 1: Navigating to login page...")
        driver.get("https://competiciones.teeone.golf/#/torneos/")
        
        # Wait for page to load
        time.sleep(3)
        
        # Step 2: Find and fill login form
        print("🔐 Step 2: Looking for login form...")
        
        # Wait for email field
        try:
            email_field = WebDriverWait(driver, 10).until(
                EC.presence_of_element_located((By.CSS_SELECTOR, "input[type='email'], input[name='email'], input[placeholder*='email' i]"))
            )
            print("✅ Found email field")
        except TimeoutException:
            print("⚠️ Email field not found, trying alternative selectors...")
            email_selectors = [
                "input[type='email']",
                "input[name='email']", 
                "input[placeholder*='email' i]",
                "input[placeholder*='Email' i]"
            ]
            
            email_field = None
            for selector in email_selectors:
                try:
                    email_field = driver.find_element(By.CSS_SELECTOR, selector)
                    print(f"✅ Found email field with selector: {selector}")
                    break
                except NoSuchElementException:
                    continue
            
            if not email_field:
                print("❌ Could not find email field")
                return False
        
        # Clear and fill email
        email_field.clear()
        email_field.send_keys("barry@scala4.com")
        print("✅ Email filled")
        
        # Find password field
        try:
            password_field = driver.find_element(By.CSS_SELECTOR, "input[type='password']")
            print("✅ Found password field")
        except NoSuchElementException:
            print("⚠️ Password field not found, trying alternative selectors...")
            password_selectors = [
                "input[type='password']",
                "input[name='password']",
                "input[placeholder*='password' i]",
                "input[placeholder*='contraseña' i]"
            ]
            
            password_field = None
            for selector in password_selectors:
                try:
                    password_field = driver.find_element(By.CSS_SELECTOR, selector)
                    print(f"✅ Found password field with selector: {selector}")
                    break
                except NoSuchElementException:
                    continue
            
            if not password_field:
                print("❌ Could not find password field")
                return False
        
        # Clear and fill password
        password_field.clear()
        password_field.send_keys("Chromcast123!")
        print("✅ Password filled")
        
        # Step 3: Submit login form
        print("🔑 Step 3: Submitting login form...")
        
        # Look for login button
        login_selectors = [
            "button[type='submit']",
            "input[type='submit']",
            "button:contains('ENTRAR')",
            "button:contains('Login')",
            "button:contains('Sign in')"
        ]
        
        login_button = None
        for selector in login_selectors:
            try:
                if ':contains(' in selector:
                    # Use XPath for text-based selectors
                    text = selector.split("'")[1]
                    login_button = driver.find_element(By.XPATH, f"//button[contains(text(), '{text}')]")
                else:
                    login_button = driver.find_element(By.CSS_SELECTOR, selector)
                print(f"✅ Found login button with selector: {selector}")
                break
            except NoSuchElementException:
                continue
        
        if not login_button:
            print("❌ Could not find login button")
            return False
        
        # Click login button
        login_button.click()
        print("✅ Login button clicked")
        
        # Wait for login to complete
        print("⏳ Waiting for login to complete...")
        time.sleep(5)
        
        # Check if login was successful
        current_url = driver.current_url
        print(f"📍 Current URL: {current_url}")
        
        # Step 4: Look for Mens Competition events
        print("📅 Step 4: Looking for Mens Competition events...")
        
        # Wait a bit for the page to load
        time.sleep(3)
        
        # Look for Mens Competition text
        try:
            mens_competition_elements = driver.find_elements(By.XPATH, "//*[contains(text(), 'MENS COMPETITION') or contains(text(), 'Mens Competition')]")
            print(f"✅ Found {len(mens_competition_elements)} Mens Competition events")
            
            if mens_competition_elements:
                # Click on the first one
                print("🖱️ Clicking on first Mens Competition event...")
                mens_competition_elements[0].click()
                time.sleep(3)
                
                # Step 5: Look for Inscripciones
                print("📋 Step 5: Looking for Inscripciones section...")
                
                inscripciones_selectors = [
                    "a:contains('Inscripciones')",
                    "button:contains('Inscripciones')",
                    "[href*='inscripciones']"
                ]
                
                inscripciones_link = None
                for selector in inscripciones_selectors:
                    try:
                        if ':contains(' in selector:
                            text = selector.split("'")[1]
                            inscripciones_link = driver.find_element(By.XPATH, f"//a[contains(text(), '{text}')] | //button[contains(text(), '{text}')]")
                        else:
                            inscripciones_link = driver.find_element(By.CSS_SELECTOR, selector)
                        print(f"✅ Found Inscripciones link with selector: {selector}")
                        break
                    except NoSuchElementException:
                        continue
                
                if inscripciones_link:
                    print("🖱️ Clicking on Inscripciones...")
                    inscripciones_link.click()
                    time.sleep(3)
                    
                    # Step 6: Extract participant data
                    print("📊 Step 6: Extracting participant data...")
                    
                    # Look for participant table
                    try:
                        table = driver.find_element(By.CSS_SELECTOR, "table")
                        rows = table.find_elements(By.CSS_SELECTOR, "tr")
                        print(f"✅ Found table with {len(rows)} rows")
                        
                        participants = []
                        for i, row in enumerate(rows):
                            if i == 0:  # Skip header
                                continue
                            
                            cells = row.find_elements(By.CSS_SELECTOR, "td")
                            if len(cells) > 0:
                                participant = {
                                    'number': cells[0].text.strip() if len(cells) > 0 else '',
                                    'license': cells[1].text.strip() if len(cells) > 1 else '',
                                    'player': cells[2].text.strip() if len(cells) > 2 else '',
                                    'gender': cells[3].text.strip() if len(cells) > 3 else '',
                                    'level': cells[4].text.strip() if len(cells) > 4 else '',
                                    'handicap': cells[5].text.strip() if len(cells) > 5 else '',
                                    'tees': cells[6].text.strip() if len(cells) > 6 else '',
                                    'observations': cells[-1].text.strip() if len(cells) > 0 else ''
                                }
                                participants.append(participant)
                        
                        print(f"✅ Extracted {len(participants)} participants")
                        
                        # Save participants data
                        os.makedirs('./exports/', exist_ok=True)
                        with open('./exports/participants_selenium.json', 'w') as f:
                            json.dump(participants, f, indent=2)
                        print("💾 Participant data saved as JSON")
                        
                        # Create CSV file
                        import csv
                        with open('./exports/participants_selenium.csv', 'w', newline='', encoding='utf-8') as f:
                            if participants:
                                writer = csv.DictWriter(f, fieldnames=participants[0].keys())
                                writer.writeheader()
                                writer.writerows(participants)
                        print("💾 Participant data saved as CSV")
                        
                        # Step 7: Look for export options
                        print("📤 Step 7: Looking for export options...")
                        
                        # Look for Opciones button
                        opciones_selectors = [
                            "button:contains('Opciones')",
                            "a:contains('Opciones')",
                            "[class*='opciones']",
                            "[id*='opciones']"
                        ]
                        
                        opciones_button = None
                        for selector in opciones_selectors:
                            try:
                                if ':contains(' in selector:
                                    text = selector.split("'")[1]
                                    opciones_button = driver.find_element(By.XPATH, f"//button[contains(text(), '{text}')] | //a[contains(text(), '{text}')]")
                                else:
                                    opciones_button = driver.find_element(By.CSS_SELECTOR, selector)
                                print(f"✅ Found Opciones button with selector: {selector}")
                                break
                            except NoSuchElementException:
                                continue
                        
                        if opciones_button:
                            print("🖱️ Clicking on Opciones...")
                            opciones_button.click()
                            time.sleep(2)
                            
                            # Look for Excel export
                            excel_selectors = [
                                "a:contains('Exportar a Excel')",
                                "button:contains('Exportar a Excel')",
                                "a:contains('Export to Excel')",
                                "button:contains('Export to Excel')"
                            ]
                            
                            excel_button = None
                            for selector in excel_selectors:
                                try:
                                    if ':contains(' in selector:
                                        text = selector.split("'")[1]
                                        excel_button = driver.find_element(By.XPATH, f"//a[contains(text(), '{text}')] | //button[contains(text(), '{text}')]")
                                    else:
                                        excel_button = driver.find_element(By.CSS_SELECTOR, selector)
                                    print(f"✅ Found Excel export button with selector: {selector}")
                                    break
                                except NoSuchElementException:
                                    continue
                            
                            if excel_button:
                                print("📊 Clicking on Excel export...")
                                excel_button.click()
                                print("✅ Excel export initiated!")
                                time.sleep(5)  # Wait for download
                            else:
                                print("⚠️ Excel export button not found")
                        else:
                            print("⚠️ Opciones button not found")
                        
                        return participants
                        
                    except NoSuchElementException:
                        print("⚠️ Participant table not found")
                        return False
                else:
                    print("⚠️ Inscripciones link not found")
                    return False
            else:
                print("⚠️ No Mens Competition events found")
                return False
                
        except Exception as e:
            print(f"❌ Error during scraping: {e}")
            return False
        
    except Exception as e:
        print(f"❌ Error: {e}")
        return False
    
    finally:
        print("🔄 Keeping browser open for 10 seconds to see results...")
        time.sleep(10)
        driver.quit()

if __name__ == "__main__":
    result = scrape_teeone()
    if result:
        print("✅ Scraping completed successfully!")
        print(f"📊 Found {len(result)} participants")
    else:
        print("❌ Scraping failed")