import time
import random
import pandas as pd

from scripts.scrap.driver_setup import get_driver
from scripts.scrap.collect_links import collect_links
from scripts.scrap.cars_parse import cars_parse


def scrape_pages(start_page=1, total_pages=500, batch_size=50):
    all_links = set()
    full_data = []
    batch_number = 1

    driver = get_driver()

    for start in range(start_page, total_pages + 1, batch_size):
        end = min(start + batch_size - 1, total_pages)
        print(f"\n=== БАТЧ {batch_number}: страницы {start} → {end} ===")

        # 1. Сбор ссылок
        batch_links = collect_links(driver, start, end, all_links)
        all_links.update(batch_links)
        print(f"Новые ссылки: {len(batch_links)}")

        # 2. Парсинг карточек
        batch_data = []
        for idx, link in enumerate(batch_links, 1):
            car_data = cars_parse(driver, link)
            if car_data:
                batch_data.append(car_data)

            if idx % 20 == 0:
                pd.DataFrame(batch_data).to_csv(
                    f"batch_{batch_number}_partial.csv",
                    index=False, encoding="utf-8-sig"
                )

            time.sleep(random.uniform(0.4, 0.9))

        # 3. Сохранение батча
        pd.DataFrame(batch_data).to_csv(
            f"batch_{batch_number}.csv",
            index=False, encoding="utf-8-sig"
        )

        full_data.extend(batch_data)

        # 4. Перезапуск драйвера
        driver.quit()
        time.sleep(random.uniform(2, 3))
        driver = get_driver()

        print("Пауза между батчами (5–10 сек)...")
        time.sleep(random.uniform(5, 10))
        batch_number += 1

    driver.quit()

    df = pd.DataFrame(full_data)
    df.to_csv("cars_final.csv", index=False, encoding="utf-8-sig")
    print("Готово! Всего собрано:", len(df))

    return df


if __name__ == "__main__":
    scrape_pages()
