#!/usr/bin/env python3
"""
GHL Team Member Management Script
- Logs into GHL
- Adds a new admin team member
"""

import os
import sys
import time
from pathlib import Path
from datetime import datetime

try:
    from playwright.sync_api import sync_playwright
except ImportError:
    print("ERROR: Playwright not installed. Run: pip install playwright && playwright install")
    sys.exit(1)


def load_env():
    """Load environment variables from .env file."""
    env_file = Path("/mnt/e/genesis-system/.env")
    if env_file.exists():
        for line in env_file.read_text().strip().split("\n"):
            if line.strip() and not line.startswith("#"):
                key, val = line.split("=", 1)
                os.environ[key.strip()] = val.strip()


def setup_screenshots():
    """Create screenshot directory with timestamp."""
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    screenshot_dir = Path(f"/mnt/e/genesis-system/reports/ghl_team_member_{timestamp}")
    screenshot_dir.mkdir(parents=True, exist_ok=True)
    return screenshot_dir


def login_to_ghl(page, email, password):
    """Log into GHL."""
    print("[*] Navigating to GHL login...")
    page.goto("https://app.leadconnectorhq.com/login", wait_until="networkidle")
    time.sleep(2)
    
    print("[*] Entering email...")
    page.fill('input[type="email"]', email)
    time.sleep(0.5)
    
    print("[*] Entering password...")
    page.fill('input[type="password"]', password)
    time.sleep(0.5)
    
    print("[*] Clicking login button...")
    page.click('button:has-text("Sign In")')
    
    try:
        page.wait_for_url("**/dashboard**", timeout=30000)
        print("[+] Successfully logged in!")
        return True
    except Exception as e:
        print(f"[-] Login failed: {e}")
        return False


def add_team_member(page, screenshot_dir, admin_email):
    """Navigate to Team Members and add new admin."""
    print("[*] Navigating to Settings → Team Members...")
    
    try:
        # Go to Settings
        page.click('a:has-text("Settings")')
        time.sleep(1)
        
        page.screenshot(path=str(screenshot_dir / "01_settings_open.png"))
        
        # Go to Team Members
        page.click('a:has-text("Team Members")')
        time.sleep(2)
        
        page.screenshot(path=str(screenshot_dir / "02_team_members_page.png"))
    except Exception as e:
        print(f"[-] Could not navigate to Team Members: {e}")
        return False
    
    try:
        # Look for "Add Member" or "Invite" button
        print("[*] Looking for 'Add Member' button...")
        add_btn = page.locator('button:has-text("Add Member"), button:has-text("Invite")').first
        
        if not add_btn.is_visible():
            print("[-] Could not find Add Member button")
            return False
        
        add_btn.click()
        time.sleep(1)
        
        page.screenshot(path=str(screenshot_dir / "03_add_member_dialog.png"))
        
        # Enter email
        print(f"[*] Entering team member email: {admin_email}")
        email_field = page.locator('input[type="email"], input[name="email"]').first
        email_field.fill(admin_email)
        time.sleep(0.5)
        
        # Select role: Admin
        print("[*] Selecting role: Admin")
        role_select = page.locator('select[name="role"], button:has-text("Role")').first
        
        if role_select.is_visible():
            role_select.click()
            time.sleep(0.5)
            # Click Admin option
            admin_option = page.locator('text="Admin"').first
            admin_option.click()
            time.sleep(0.5)
        
        page.screenshot(path=str(screenshot_dir / "04_role_selected.png"))
        
        # Send invite
        print("[*] Sending invite...")
        invite_btn = page.locator('button:has-text("Send Invite"), button:has-text("Add"), button:has-text("Invite")').first
        
        if invite_btn.is_visible():
            invite_btn.click()
            time.sleep(2)
            
            page.screenshot(path=str(screenshot_dir / "05_invite_sent.png"))
            print(f"[+] Invite sent to {admin_email}")
            return True
        else:
            print("[-] Could not find Send Invite button")
            return False
            
    except Exception as e:
        print(f"[-] Error adding team member: {e}")
        page.screenshot(path=str(screenshot_dir / "error.png"))
        return False


def main():
    load_env()
    
    # Get credentials
    ghl_email = os.environ.get("GHL_EMAIL")
    ghl_password = os.environ.get("GHL_PASSWORD")
    admin_email = os.environ.get("GHL_ADMIN_EMAIL")
    
    if not ghl_email or not ghl_password:
        print("ERROR: GHL_EMAIL and GHL_PASSWORD environment variables required")
        sys.exit(1)
    
    if not admin_email:
        print("ERROR: GHL_ADMIN_EMAIL environment variable required")
        sys.exit(1)
    
    screenshot_dir = setup_screenshots()
    print(f"[+] Screenshot directory: {screenshot_dir}")
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=['--no-sandbox'])
        context = browser.new_context(
            viewport={'width': 1920, 'height': 1080},
            user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
        )
        page = context.new_page()
        
        try:
            # Login
            if not login_to_ghl(page, ghl_email, ghl_password):
                sys.exit(1)
            
            page.screenshot(path=str(screenshot_dir / "00_logged_in.png"))
            
            # Add team member
            print("\n=== ADDING TEAM MEMBER ===")
            if add_team_member(page, screenshot_dir, admin_email):
                print(f"\n[+] Team member addition complete! Screenshots saved to: {screenshot_dir}")
            else:
                print(f"\n[-] Team member addition failed. Screenshots saved to: {screenshot_dir}")
                sys.exit(1)
            
        finally:
            context.close()
            browser.close()


if __name__ == "__main__":
    main()
