from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import sys
import os

# Debug: Print the current working directory and list files
print(f"Current working directory: {os.getcwd()}")
print(f"Files in directory: {os.listdir(os.getcwd())}")

try:
    from login import login_to_cms
    print("✅ Successfully imported login_to_cms from login.py")
except ImportError as e:
    print(f"❌ Failed to import login_to_cms: {e}")
    sys.exit(1)

def test_notifications():
    driver = None
    try:
        driver = login_to_cms()
        print("Logged in, proceeding to Notifications test")

        WebDriverWait(driver, 20).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "li.ant-menu-item"))
        )
        print("Sidebar loaded")

        notifications_link = WebDriverWait(driver, 20).until(
            EC.element_to_be_clickable((By.XPATH, "//li[contains(@class, 'ant-menu-item') and normalize-space()='Notifications']"))
        )
        driver.execute_script("arguments[0].scrollIntoView(true);", notifications_link)
        notifications_link.click()
        print("Clicked Notifications tab")
        time.sleep(1)

        WebDriverWait(driver, 20).until(
            EC.visibility_of_element_located((By.XPATH, "//h1[contains(text(), 'Notifications')]"))
        )
        print("Successfully navigated to Notifications page")
        time.sleep(1)

        # Click Add Notification button
        add_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Add Notification']]"))
        )
        add_button.click()
        print("Clicked Add Notification button")
        time.sleep(1)

        # Fill in Subject
        subject_field = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.NAME, "subject"))
        )
        subject_field.send_keys("Test")
        print("Entered Subject: Test")
        time.sleep(1)

        # Fill in Content
        content_field = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.NAME, "content"))
        )
        content_field.send_keys("This is a testing notification")
        print("Entered Content: This is a testing notification")
        time.sleep(1)

        # Click "Yes" radio button
        yes_radio = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//input[@name='isScheduled' and @value='true']/.."))
        )
        yes_radio.click()
        print("Selected 'Yes' for scheduling")
        time.sleep(1)

        # Click Schedule Date input
        schedule_input = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Schedule']"))
        )
        schedule_input.click()
        print("Clicked Schedule Date input")
        time.sleep(1)

        # Click "Now" button
        now_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//a[contains(@class, 'ant-calendar-today-btn')]"))
        )
        now_button.click()
        print("Selected 'Now' as schedule")
        time.sleep(1)

        # Click Expiration Date input
        expiration_input = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//input[@placeholder='Expiration']"))
        )
        expiration_input.click()
        print("Clicked Expiration Date input")
        time.sleep(1)

        # Select day 13
        day_13 = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//div[@class='ant-calendar-date' and text()='13']"))
        )
        day_13.click()
        print("Selected expiration date: 13")
        time.sleep(1)

        # Click Ok
        ok_button = WebDriverWait(driver, 10).until(
            EC.element_to_be_clickable((By.XPATH, "//a[@class='ant-calendar-ok-btn']"))
        )
        ok_button.click()
        print("Clicked OK to confirm expiration date")
        time.sleep(1)

                # Click Submit
        submit_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//button[.//span[text()='Submit']]"))
        )
        submit_button.click()
        print("Clicked Submit button")
        time.sleep(3)  # Wait a bit for potential error/toast to appear

        # Try to detect error or toast message
        try:
            # Example: Ant Design error/toast uses ant-message or ant-notification
            error_element = WebDriverWait(driver, 5).until(
                EC.presence_of_element_located((By.XPATH, "//*[contains(@class, 'ant-message') or contains(@class, 'ant-notification')]"))
            )
            print("⚠️  Error/Toast message detected:")
            print(error_element.text)
        except:
            print("✅ No visible error/toast message detected after submission.")

        # Take screenshot after submission attempt
        driver.save_screenshot("notification_submitted.png")
        print("📸 Screenshot saved as notification_submitted.png")

        # Wait 10 seconds before closing
        print("Waiting 10 seconds before closing browser...")
        time.sleep(10)


        return driver

    except Exception as e:
        print(f"Test failed: {e}")
        if driver is not None:
            driver.save_screenshot("error.png")
            print("Screenshot saved as error.png for debugging")
        if driver is not None:
            driver.quit()
        raise

    except KeyboardInterrupt:
        print("\nUser interrupted the script. Closing the browser.")
        if driver is not None:
            driver.quit()

if __name__ == "__main__":
    test_notifications()
