#!/usr/bin/env python3
"""
TalkingWidget.ai — Follow-up investigation for Test 7 (Footer) and Test 5 (Mobile)
Also captures remaining screenshots with corrected logic.
"""

import re
from playwright.sync_api import sync_playwright

REPORT_DIR = "/mnt/e/genesis-system/qa_reports"
TARGET_URL = "https://talkingwidget.ai"

def run():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=["--no-sandbox", "--disable-dev-shm-usage"])

        # ── Footer deep dive ──────────────────────────────────────────────
        print("\n=== FOOTER DEEP DIVE ===")
        ctx = browser.new_context(viewport={"width": 1440, "height": 900})
        page = ctx.new_page()
        page.goto(TARGET_URL, wait_until="domcontentloaded", timeout=20000)
        page.wait_for_timeout(2000)

        # Scroll to absolute bottom
        page.evaluate("() => window.scrollTo(0, document.body.scrollHeight)")
        page.wait_for_timeout(1500)

        # Full page screenshot to determine height
        ss_full = f"{REPORT_DIR}/tw_test7_footer_full.png"
        page.screenshot(path=ss_full, full_page=True)
        print(f"Full page screenshot: {ss_full}")

        # Standard viewport screenshot (what's in view at bottom)
        ss_footer = f"{REPORT_DIR}/tw_test7_footer.png"
        page.screenshot(path=ss_footer)
        print(f"Footer viewport screenshot: {ss_footer}")

        # Extract all links
        all_links = page.evaluate("""
            () => [...document.querySelectorAll('a')].map(a => ({
                text: a.textContent.trim(),
                href: a.href,
                inFooter: !!a.closest('footer')
            }))
        """)

        # Check for Terms and Privacy
        terms = [l for l in all_links if "terms" in l["text"].lower() or "terms" in l["href"].lower() or "tos" in l["href"].lower()]
        privacy = [l for l in all_links if "privacy" in l["text"].lower() or "privacy" in l["href"].lower()]

        print(f"\nTerms links found: {terms}")
        print(f"Privacy links found: {privacy}")

        # Check for footer element
        footer_html = page.evaluate("""
            () => {
                const footer = document.querySelector('footer');
                if (footer) return footer.innerHTML.substring(0, 500);
                return 'NO <footer> ELEMENT';
            }
        """)
        print(f"\nFooter HTML: {footer_html[:300]}")

        # Get full page text for footer area
        page_text = page.evaluate("() => document.body.innerText")
        text_lower = page_text.lower()
        has_terms_text = "terms" in text_lower
        has_privacy_text = "privacy" in text_lower
        has_copyright = "©" in page_text or "copyright" in text_lower
        print(f"\nPage has 'terms': {has_terms_text}")
        print(f"Page has 'privacy': {has_privacy_text}")
        print(f"Page has copyright: {has_copyright}")

        # Show all footer/bottom content links
        print(f"\nAll links containing 'terms' or 'privacy':")
        for l in all_links:
            if any(kw in l["text"].lower() or kw in l["href"].lower()
                   for kw in ["terms", "privacy", "legal", "policy"]):
                print(f"  {l}")

        footer_pass = len(terms) > 0 and len(privacy) > 0
        print(f"\nTest 7 RESULT: {'PASS' if footer_pass else 'FAIL'}")
        print(f"Screenshot: {ss_footer}")

        ctx.close()

        # ── Mobile deep dive ──────────────────────────────────────────────
        print("\n=== MOBILE DEEP DIVE (375x812) ===")
        mob_ctx = browser.new_context(
            viewport={"width": 375, "height": 812},
            user_agent="Mozilla/5.0 (iPhone; CPU iPhone OS 16_0 like Mac OS X) AppleWebKit/605.1.15"
        )
        mob_page = mob_ctx.new_page()
        mob_page.goto(TARGET_URL, wait_until="domcontentloaded", timeout=20000)
        mob_page.wait_for_timeout(2000)

        scroll_width = mob_page.evaluate("() => document.documentElement.scrollWidth")
        client_width = mob_page.evaluate("() => document.documentElement.clientWidth")
        body_scroll = mob_page.evaluate("() => document.body.scrollWidth")
        print(f"documentElement.scrollWidth = {scroll_width}")
        print(f"documentElement.clientWidth = {client_width}")
        print(f"body.scrollWidth = {body_scroll}")
        print(f"Overflow = {scroll_width - client_width}px")

        # Find elements causing overflow
        overflow_els = mob_page.evaluate("""
            () => {
                const docWidth = document.documentElement.clientWidth;
                const offenders = [];
                document.querySelectorAll('*').forEach(el => {
                    const rect = el.getBoundingClientRect();
                    if (rect.right > docWidth + 5) {
                        offenders.push({
                            tag: el.tagName,
                            id: el.id || '',
                            class: (el.className || '').toString().substring(0, 60),
                            right: Math.round(rect.right),
                            width: Math.round(rect.width)
                        });
                    }
                });
                return offenders.slice(0, 10);
            }
        """)
        print(f"\nElements causing horizontal overflow:")
        for el in overflow_els:
            print(f"  {el}")

        # Top of page screenshot
        mob_page.screenshot(path=f"{REPORT_DIR}/tw_test5_mobile.png", full_page=False)
        mob_page.screenshot(path=f"{REPORT_DIR}/tw_test5_mobile_full.png", full_page=True)
        print(f"\nMobile screenshots saved")

        mob_ctx.close()
        browser.close()

if __name__ == "__main__":
    run()
