import os
import json
import schedule
import undetected_chromedriver as uc
from bs4 import BeautifulSoup
from datetime import datetime
import time

DATA_DIR = os.path.expanduser('~/.parabilesen')
os.makedirs(DATA_DIR, exist_ok=True)

DATA_FILE = os.path.join(DATA_DIR, 'car_prices.json')
LOG_FILE = os.path.join(DATA_DIR, 'scraper.log')
CONFIG_FILE = os.path.join(DATA_DIR, 'car_config.json')

def log(msg):
    now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    line = f"[{now}] {msg}"
    print(line)
    try:
        with open(LOG_FILE, 'a', encoding='utf-8') as f:
            f.write(line + "\n")
    except:
        pass

def get_config():
    default_config = {
        "carUrl": "https://www.arabam.com/ikinci-el/arazi-suv-pick-up/togg-t10x-v2-uzun-menzil?minkm=45000&maxkm=50000&minYear=2024&maxYear=2024&severaldamaged=false&damagestatus=Boyas%C4%B1z%2C+De%C4%9Fi%C5%9Fensiz+ve+Tramersiz",
        "carSymbol": "CAR:CUSTOM",
        "carName": "Togg T10x V2 Uzun Menzil (45k-50k KM)"
    }
    if os.path.exists(CONFIG_FILE):
        try:
            with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
                return json.load(f)
        except Exception as e:
            log(f"Config okuma hatasi: {e}")
            return default_config
    return default_config

def scrape_car():
    config = get_config()
    url = config.get("carUrl")
    symbol = config.get("carSymbol", "CAR:CUSTOM")
    name = config.get("carName", "Ozel Araba")
    
    if not url:
        log("Hata: carUrl tanimli degil. İslemi iptal ediyorum.")
        return

    log(f"Fiyatlar cekiliyor: {name}...")
    
    options = uc.ChromeOptions()
    # Cloudflare bypass icin profili (cookie'leri) kaydetmemiz sart
    profile_path = os.path.join(DATA_DIR, 'chrome_profile')
    options.add_argument(f'--user-data-dir={profile_path}')
    
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-dev-shm-usage')
    
    driver = None
    try:
        from webdriver_manager.chrome import ChromeDriverManager
        driver_path = ChromeDriverManager().install()
        driver = uc.Chrome(options=options, driver_executable_path=driver_path)
    except Exception as e:
        log(f"Driver baslatilamadi: {e}")
        return
            
    try:
        driver.get(url)
        time.sleep(15) # Sayfanin yuklenmesi icin bekle
        
        html = driver.page_source
        soup = BeautifulSoup(html, 'html.parser')
        
        prices = []
        # Tüm metinlerde gezinip 100 Bin ile 10 Milyon TL arasındaki sayıları bulalım
        import re
        text_content = soup.get_text(separator=' ')
        # "1.550.000 TL" veya "1.550.000" gibi kaliplari bul
        # Yeni regex: 100.000 ile 9.999.999 arasi (3 basamakli veya 1 haneli milyonlar)
        numbers = re.findall(r'\b\d{1,3}\.\d{3}\.\d{3}\b|\b\d{3}\.\d{3}\b', text_content)
        
        for num_str in numbers:
            clean_price = num_str.replace(".", "")
            if clean_price.isdigit():
                val = int(clean_price)
                if 200000 <= val <= 10000000: # 200 Bin TL ile 10 Milyon TL arasi gecerli fiyatlar
                    prices.append(val)
                    
        # Listeden benzersiz (unique) ve geçerli fiyatları alalım
        prices = list(set(prices))
        
        if len(prices) > 0:
            min_p = min(prices)
            max_p = max(prices)
            avg_p = (min_p + max_p) / 2
            
            data = {
                "symbol": symbol,
                "name": name,
                "min": min_p,
                "max": max_p,
                "average": avg_p,
                "last_updated": datetime.now().isoformat(),
                "count": len(prices)
            }
            
            with open(DATA_FILE, 'w', encoding='utf-8') as f:
                json.dump(data, f, ensure_ascii=False, indent=4)
                
            log(f"Basarili! Fiyatlar bulundu. Min: {min_p}, Max: {max_p}, Ortalama: {avg_p}")
        else:
            log("Sayfa yuklendi ama gecerli fiyat bulunamadi. İlan olmayabilir veya fiyat araligi (200k-10M) disinda kalmis olabilir.")
            
    except Exception as e:
        log(f"Hata olustu: {e}")
    finally:
        if driver:
            driver.quit()

def run_job():
    # Hafta ici kontrolu
    day = datetime.now().weekday()
    if day < 5: # 0-4 arasi Pazartesi-Cuma
        scrape_car()
    else:
        log("Haftasonu oldugu icin calistirilmiyor.")

if __name__ == "__main__":
    log("Auto Scraper baslatildi. Zamanlayici ayarlanacak...")
    # Ilk acilista bir kere calistir
    scrape_car()
    
    # Her gun saat 10:00'da calistir
    schedule.every().day.at("10:00").do(run_job)
    
    log("Zamanlayici calisiyor (Hafta ici her gun 10:00).")
    
    while True:
        schedule.run_pending()
        time.sleep(60)
