from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager
from bs4 import BeautifulSoup
import pandas as pd
import time
import random
import json
import logging
from requests.exceptions import RequestException
import mysql.connector

# Налаштування логування
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

# Налаштування ChromeDriver
chrome_options = Options()
chrome_options.add_argument("--headless")  # Безголовний режим
chrome_options.add_argument("--disable-gpu")  # Вимкнення GPU
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-extensions")
chrome_options.add_argument("--no-proxy-server")  # Вимкнення проксі
chrome_options.add_argument("--proxy-server='direct://'")
chrome_options.add_argument("--proxy-bypass-list=*")
chrome_options.add_argument("--disk-cache-size=0")  # Очищення кешу
chrome_options.add_argument("--incognito")  # Приватний режим
chrome_options.add_argument("--enable-unsafe-swiftshader")
chrome_options.add_argument("--use-gl=swiftshader")
chrome_options.add_argument("--disable-software-rasterizer")
chrome_options.add_argument("--dns-prefetch-disable")  # Вимкнення DNS Prefetch
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--disable-webgl")
chrome_options.add_argument("--use-angle=gl")
chrome_options.add_argument("--enable-unsafe-swiftshader")
chrome_options.add_argument("--log-level=3")
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")

#chrome_options.add_argument("--host-resolver-rules=MAP * 0.0.0.0 , EXCLUDE localhost")

# Ініціалізація драйвера
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=chrome_options)

# Параметри підключення до MySQL
db_config = {
    "host": "104.236.70.14",  # Адреса сервера бази даних
    "user": "integration",       # Ім'я користувача
    "password": "?Q8/{lVK2N08Y<b>k",  # Пароль
    "database": "Salsify"  # Назва бази даних
}

# Підключення до бази даних
try:
    connection = mysql.connector.connect(**db_config)
    # print("Підключення до бази даних успішне.")
except mysql.connector.Error as e:
    # print(f"Помилка підключення: {e}")
    exit()

# SQL-запит для отримання даних
query = """
SELECT SL.SKU, SHDUS.`Home Depot ID` as 'LINK'
FROM  Salsify.MainData SL
LEFT JOIN Salsify.Homedepot SHDUS ON SL.SKU = SHDUS.SKU
WHERE (SHDUS.SKU LIKE '%' AND  (SL.Status)='Active' AND SHDUS.`Home Depot ID` IS NOT NULL) OR  (SHDUS.SKU LIKE '%' AND (SL.Status)='Liquidation' AND SHDUS.`Home Depot ID` IS NOT NULL)
"""

try:
    cursor = connection.cursor(dictionary=True)
    cursor.execute(query)
    results = cursor.fetchall()

    df_input = pd.DataFrame(results)
    df_input['Full_URL'] = "https://www.homedepot.com/p/"+df_input['SKU'].astype(str)+"/"+ df_input['LINK'].astype(str)

    urls = df_input['Full_URL'].dropna().tolist()
    additional_data = df_input['SKU'].tolist()

finally:
    if connection.is_connected():
        cursor.close()
        connection.close()

all_data = []

def process_url_with_click(url):
    max_retries = 3 
    for attempt in range(max_retries):
        # try:
            time.sleep(random.uniform(3, 5))
            logging.info(f"Processing URL: {url}")
            driver.get(url)

            time.sleep(3)

            pdfObject = {}
            if 'Special Buys' in driver.page_source: 
                pdfObject['Special Buy'] = True
            else:
                pdfObject['Special Buy'] = False
            # links = soup.find_all('a', target="_blank")
            pdf_links = []
            pdf_links.append(pdfObject);
            # for link in links:
            #     href = link.get('href', '-')
            #     if '.pdf' in href:
            #         formatted_href = f"{href}".replace(" ", "")
            #         text = link.get_text(strip=True) or "-"
                    
            #         pdfObject['PDF Link'] = formatted_href
            #         pdfObject['PDF Text'] = text

                
            if not pdf_links:
                pdf_links.append({'PDF Link': 'PDF not found', 'PDF Text': 'PDF not found'})
            return pdf_links

        # except Exception as e:
        #     logging.error(f"Помилка обробки {url} на спробі {attempt + 1}: {e}")
        #     if attempt < max_retries - 1:
        #         # logging.info(f"Повторна спроба через 10 секунд...")
        #         time.sleep(10)
        #     else:
        #         # logging.error(f"Неможливо обробити URL після {max_retries} спроб.")
        #         return []

# Обробка всіх URL
for i, url in enumerate(urls):
    data = process_url_with_click(url)
    if data:
        row = {'Base URL': urls[i], 'SKU': additional_data[i], 'Special Buy' : data[0]['Special Buy']}
        logging.info(f"{additional_data[i]} result (Record: {row})")
        # for j, item in enumerate(data):
        #     row[f"PDF Name {j+1}"] = item['PDF Text']
        #     row[f"PDF Link {j+1}"] = item['PDF Link']
        all_data.append(row)
        

# Закриваємо драйвер
driver.quit()
print(json.dumps(all_data))
# Створення DataFrame
# df_output = pd.DataFrame(all_data)

# Збереження в Excel
# output_file = "C:/Users/Администратор/HDUS_PDFs/ResultHDUS_PDFs.xlsx"
# df_output.to_excel(output_file, index=False, engine='openpyxl')
# logging.info(f"Дані збережені в {output_file}")