from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup
import time
from webdriver_manager.chrome import ChromeDriverManager
import mysql.connector
from mysql.connector import Error
import requests

# Настройка параметров Chrome для безголового режима
chrome_options = Options()
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("--disable-software-rasterizer")
chrome_options.add_argument("--remote-debugging-port=9222")

# Устанавливаем драйвер через ChromeDriverManager
service = Service(ChromeDriverManager().install())

# Инициализация драйвера с использованием установленного сервиса и опций
driver = webdriver.Chrome(service=service, options=chrome_options)


# Определение параметров фильтрации
min_price = 15000
max_price = 35000
min_year = 2008

# Открытие страницы с фильтрацией
url = (f'https://www.olx.pl/motoryzacja/dostawcze/furgon-blaszak/'
       f'?search[filter_float_price:from]={min_price}'
       f'&search[filter_float_price:to]={max_price}'
       f'&search[filter_float_year:from]={min_year}'
       f'&search[order]=created_at:desc')

driver.get(url)
time.sleep(5)  # Ожидание загрузки страницы

# Получение HTML-кода страницы
page_source = driver.page_source
soup = BeautifulSoup(page_source, 'html.parser')

# Подключение к базе данных MySQL
try:
    connection = mysql.connector.connect(
        host='localhost',
        database='OLX',
        user='root',
        password='AaBbCc-2023r'
    )
    cursor = connection.cursor()
    print("Подключение к базе данных успешно.")
except Error as e:
    print(f"Ошибка подключения к базе данных: {e}")
    connection = None

# Настройка Telegram-бота
TELEGRAM_TOKEN = '7470095922:AAH4drCgtrqtzf8ZGQaPxGP5yhOYRqT65rc'
CHAT_ID = '6507191442'

def send_telegram_message(text):
    url = f'https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage'
    payload = {
        'chat_id': CHAT_ID,
        'text': text
    }
    response = requests.post(url, json=payload)
    if response.status_code == 200:
         print('Message sent successfully!')
    else:
         print(f'Failed to send message. Status code: {response.status_code}')
         print(response.text)

# Поиск объявлений с актуальными классами
ads = soup.find_all('div', class_='css-1apmciz')

for ad in ads:
    title = ad.find('h6', class_='css-1wxaaza')
    title_text = title.get_text(strip=True) if title else 'Без названия'

    price = ad.find('p', class_='css-13afqrm')
    price_text = price.get_text(strip=True) if price else 'Цена не указана'

    link = ad.find('a', class_='css-z3gu2d')
    link_href = link['href'] if link else 'Ссылка не найдена'
    link_href = 'https://www.olx.pl' + link_href if link_href.startswith('/') else link_href

    if connection:
        try:
            # Проверка существования записи
            cursor.execute("SELECT COUNT(*) FROM ads WHERE link = %s", (link_href,))
            count = cursor.fetchone()[0]

            if count == 0:
                # Запись не найдена, добавляем её
                query = "INSERT INTO ads (title, price, link) VALUES (%s, %s, %s)"
                values = (title_text, price_text, link_href)
                cursor.execute(query, values)
                connection.commit()
                print(f'Запись добавлена: {title_text}, {price_text}, {link_href}')
                
                # Отправка уведомления в Telegram
                message = f"Новое в PL:\n {title_text}\n Цена: {price_text}\n {link_href}"
                send_telegram_message(message)
            else:
                print(f'Запись уже существует: {link_href}')

        except Error as e:
            print(f"Ошибка при обработке записи: {e}")

# Закрытие соединения с базой данных
if connection:
    cursor.close()
    connection.close()
    print("Соединение с базой данных закрыто.")

# Закрытие драйвера
driver.quit()
