import os
import sys
import time
from pathlib import Path
from playwright.sync_api import sync_playwright

def login_facebook():
    print("🚀 Starting Facebook 2FA Login Session (HEADLESS)...")
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        context = browser.new_context(
            user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
        )
        page = context.new_page()
        
        try:
            print("Navigating to Facebook Home...")
            page.goto('https://mbasic.facebook.com/', timeout=60000)
            page.wait_for_load_state('networkidle')
            
            print("Filling credentials...")
            page.fill('input[name="email"]', 'f.kloosterman@gmail.com')
            page.fill('input[name="pass"]', 'Manouche6')
            
            # Click login
            login_btn = page.query_selector('input[name="login"]') or page.query_selector('input[type="submit"]')
            if login_btn:
                login_btn.click()
            else:
                page.keyboard.press('Enter')
                
            print("Login submitted. Waiting for 2FA screen...")
            time.sleep(8)
            
            # Save screenshot of the 2FA challenge
            screenshot_path = 'reports/fb_2fa_challenge.png'
            page.screenshot(path=screenshot_path)
            print(f"✅ Screenshot saved to {screenshot_path}")
            
            # Check for c_user/xs cookies
            for i in range(120): # 2 minute window
                # Check for code file
                code_file = Path("fb_code.txt")
                if code_file.exists():
                    code = code_file.read_text().strip()
                    print(f"Found code: {code}. Submitting...")
                    # Facebook 2FA usually has an 'approvals_code' field
                    code_input = page.query_selector("input[name='approvals_code']") or page.query_selector("input[type='text']")
                    if code_input:
                        code_input.fill(code)
                        page.keyboard.press("Enter")
                        time.sleep(5)
                
                # Check for session cookies
                cookies = context.cookies()
                c_user = next((c for c in cookies if c['name'] == 'c_user'), None)
                xs = next((c for c in cookies if c['name'] == 'xs'), None)
                
                if c_user and xs:
                    print(f"✅ FOUND COOKIES: c_user={c_user['value']} xs={xs['value']}")
                    # Save them
                    with open("Credentials/fb_cookies.txt", "w") as f:
                        f.write(f"c_user={c_user['value']}\nxs={xs['value']}\n")
                    
                    context.storage_state(path="data/facebook_session.json")
                    print("✅ Facebook Login Success!")
                    if code_file.exists(): code_file.unlink()
                    break
                
                time.sleep(1)
                    
        except Exception as e:
            print(f"Error: {e}")
            page.screenshot(path='reports/fb_error.png')
        finally:
            browser.close()

if __name__ == '__main__':
    os.makedirs('reports', exist_ok=True)
    os.makedirs('data', exist_ok=True)
    os.makedirs('Credentials', exist_ok=True)
    login_facebook()
