#!/usr/bin/env python3
"""
GoDaddy DNS Setup Automation
Logs into GoDaddy and adds DNS records for sunaivadigital.com
"""

from playwright.sync_api import sync_playwright, expect
import time
import os

# Configuration
GODADDY_USERNAME = "108866004"
GODADDY_PASSWORD = "TripleWebsites333"
DOMAIN = "sunaivadigital.com"
SCREENSHOT_DIR = "/mnt/e/genesis-system/swarm-output/session21/godaddy"

# DNS Records to add
DNS_RECORDS = [
    {
        "type": "A",
        "name": "api",
        "value": "152.53.201.221",
        "ttl": "600"
    },
    {
        "type": "CNAME",
        "name": "www",
        "value": "sunaiva-talking-widget.netlify.app",
        "ttl": "3600"
    }
]

def setup_dns():
    """Main function to automate GoDaddy DNS setup"""

    os.makedirs(SCREENSHOT_DIR, exist_ok=True)

    with sync_playwright() as p:
        print("Launching browser with stealth settings...")
        browser = p.chromium.launch(
            headless=False,
            args=[
                '--disable-blink-features=AutomationControlled',
                '--disable-dev-shm-usage',
                '--no-sandbox'
            ]
        )
        context = browser.new_context(
            viewport={"width": 1920, "height": 1080},
            user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36',
            locale='en-US',
            timezone_id='America/New_York',
            extra_http_headers={
                'Accept-Language': 'en-US,en;q=0.9',
            }
        )

        # Add script to hide webdriver property
        page = context.new_page()
        page.add_init_script("""
            Object.defineProperty(navigator, 'webdriver', {
                get: () => undefined
            });
        """)

        try:
            # Step 1: Navigate to GoDaddy SSO login
            print("Navigating to GoDaddy login...")
            page.goto("https://sso.godaddy.com", wait_until="networkidle")
            page.screenshot(path=f"{SCREENSHOT_DIR}/01_login_page.png")

            # Handle cookie consent if present
            try:
                cookie_button = page.locator("button:has-text('Accept')")
                if cookie_button.is_visible(timeout=3000):
                    print("Accepting cookies...")
                    cookie_button.click()
                    page.screenshot(path=f"{SCREENSHOT_DIR}/02_cookies_accepted.png")
            except:
                print("No cookie consent banner found")

            # Step 2: Enter username
            print("Entering username...")
            username_field = page.locator("#username, input[name='username'], input[type='text']").first
            username_field.wait_for(state="visible", timeout=10000)
            username_field.fill(GODADDY_USERNAME)
            page.screenshot(path=f"{SCREENSHOT_DIR}/03_username_entered.png")

            # Click Next/Continue button
            next_button = page.locator("button[type='submit'], button:has-text('Next'), button:has-text('Sign In')").first
            next_button.click()
            time.sleep(2)
            page.screenshot(path=f"{SCREENSHOT_DIR}/04_after_username_submit.png")

            # Step 3: Enter password
            print("Entering password...")
            password_field = page.locator("#password, input[name='password'], input[type='password']").first
            password_field.wait_for(state="visible", timeout=10000)
            password_field.fill(GODADDY_PASSWORD)
            page.screenshot(path=f"{SCREENSHOT_DIR}/05_password_entered.png")

            # Click Sign In
            signin_button = page.locator("button[type='submit'], button:has-text('Sign In')").first
            signin_button.click()
            print("Submitted login credentials...")

            # Wait for potential MFA or redirect
            time.sleep(5)
            page.screenshot(path=f"{SCREENSHOT_DIR}/06_after_signin.png")

            # Check for MFA prompt
            try:
                mfa_prompt = page.locator("text=/verification|authenticate|code/i").first
                if mfa_prompt.is_visible(timeout=3000):
                    print("⚠️ MFA DETECTED - Manual intervention required")
                    page.screenshot(path=f"{SCREENSHOT_DIR}/07_MFA_PROMPT.png")
                    print(f"Screenshot saved to {SCREENSHOT_DIR}/07_MFA_PROMPT.png")
                    print("Please complete MFA manually. Waiting 60 seconds...")
                    time.sleep(60)
                    page.screenshot(path=f"{SCREENSHOT_DIR}/08_after_mfa.png")
            except:
                print("No MFA prompt detected")

            # Step 4: Navigate to domain management
            print(f"Navigating to DNS management for {DOMAIN}...")
            page.goto(f"https://dcc.godaddy.com/control/{DOMAIN}/dns", wait_until="networkidle")
            time.sleep(3)
            page.screenshot(path=f"{SCREENSHOT_DIR}/09_dns_management_page.png")

            # Check if we're actually logged in and on the DNS page
            if "login" in page.url.lower() or "sso" in page.url.lower():
                print("❌ Still on login page - authentication failed")
                page.screenshot(path=f"{SCREENSHOT_DIR}/10_STILL_ON_LOGIN.png")
                return False

            # Step 5: Add DNS records
            for idx, record in enumerate(DNS_RECORDS):
                print(f"\nAdding {record['type']} record: {record['name']} -> {record['value']}")

                try:
                    # Click "Add" or "Add Record" button
                    add_button = page.locator("button:has-text('Add'), button:has-text('Add Record')").first
                    add_button.wait_for(state="visible", timeout=10000)
                    add_button.click()
                    time.sleep(2)
                    page.screenshot(path=f"{SCREENSHOT_DIR}/11_{idx}_add_button_clicked.png")

                    # Select record type
                    type_selector = page.locator("select[name='type'], select:has-option('A'), select:has-option('CNAME')").first
                    type_selector.select_option(record['type'])
                    time.sleep(1)
                    page.screenshot(path=f"{SCREENSHOT_DIR}/12_{idx}_type_selected.png")

                    # Fill in name field
                    name_field = page.locator("input[name='name'], input[placeholder*='name' i]").first
                    name_field.fill(record['name'])

                    # Fill in value field
                    value_field = page.locator("input[name='value'], input[name='data'], input[placeholder*='value' i], input[placeholder*='points to' i]").first
                    value_field.fill(record['value'])

                    # Fill in TTL
                    ttl_field = page.locator("input[name='ttl'], select[name='ttl']").first
                    if ttl_field.evaluate("el => el.tagName").lower() == "select":
                        ttl_field.select_option(record['ttl'])
                    else:
                        ttl_field.fill(record['ttl'])

                    page.screenshot(path=f"{SCREENSHOT_DIR}/13_{idx}_record_filled.png")

                    # Save the record
                    save_button = page.locator("button:has-text('Save'), button:has-text('Add Record'), button[type='submit']").first
                    save_button.click()
                    time.sleep(3)
                    page.screenshot(path=f"{SCREENSHOT_DIR}/14_{idx}_record_saved.png")

                    print(f"✅ {record['type']} record added successfully")

                except Exception as e:
                    print(f"❌ Error adding {record['type']} record: {str(e)}")
                    page.screenshot(path=f"{SCREENSHOT_DIR}/ERROR_{idx}_{record['type']}_record.png")
                    continue

            # Final screenshot of DNS records
            print("\nFinal DNS configuration:")
            page.screenshot(path=f"{SCREENSHOT_DIR}/15_FINAL_DNS_RECORDS.png")

            print("\n✅ DNS setup automation complete!")
            print(f"Screenshots saved to: {SCREENSHOT_DIR}")

            # Keep browser open for manual verification
            print("\nBrowser will remain open for 30 seconds for manual verification...")
            time.sleep(30)

            return True

        except Exception as e:
            print(f"\n❌ Automation failed: {str(e)}")
            page.screenshot(path=f"{SCREENSHOT_DIR}/ERROR_FINAL.png")
            import traceback
            traceback.print_exc()

            # Keep browser open on error
            print("\nBrowser will remain open for 60 seconds for debugging...")
            time.sleep(60)

            return False

        finally:
            browser.close()

if __name__ == "__main__":
    print("=" * 80)
    print("GoDaddy DNS Setup Automation")
    print("=" * 80)
    print(f"\nDomain: {DOMAIN}")
    print(f"Records to add:")
    for record in DNS_RECORDS:
        print(f"  - {record['type']}: {record['name']} -> {record['value']} (TTL: {record['ttl']})")
    print(f"\nScreenshots will be saved to: {SCREENSHOT_DIR}")
    print("=" * 80)
    print()

    success = setup_dns()

    if success:
        print("\n✅ Automation completed successfully")
        print("\nNext steps:")
        print("1. Verify DNS records at https://dcc.godaddy.com")
        print("2. Test resolution with: dig api.sunaivadigital.com")
        print("3. Test CNAME with: dig www.sunaivadigital.com")
    else:
        print("\n⚠️ Automation encountered issues - check screenshots for details")
        print("\nFallback option: Use GoDaddy API")
        print("1. Create API keys at https://developer.godaddy.com/keys")
        print("2. Use curl commands with the API key to add records programmatically")
