#!/usr/bin/env python3
"""
GHL Conversation AI Setup - with proper page loading
Creates Conversation AI bot for Bunker FNQ demo location
"""
import os, sys, time, json
from datetime import datetime
from pathlib import Path

sys.path.insert(0, '/mnt/e/genesis-system')
os.environ['LD_LIBRARY_PATH'] = '/mnt/e/genesis-system/.venvs/playwright-libs/'

GHL_EMAIL = os.getenv('GHL_EMAIL', 'kinan@agileadpt.com')
GHL_PASSWORD = os.getenv('GHL_PASSWORD', 'SystemBird505*')
LOCATION_ID = 'SWdaQpAVAtRigYcMfder'
REPORT_DIR = Path(f'/mnt/e/genesis-system/reports/ghl_conv_ai_{datetime.now().strftime("%Y%m%d_%H%M%S")}')
REPORT_DIR.mkdir(parents=True, exist_ok=True)

BOT_CONFIG = {
    'name': 'Bunker FNQ AI Receptionist',
    'system_prompt': """You are the friendly AI receptionist for Bunker FNQ, a concreting business in Kuranda, Queensland. 
You help potential clients by answering questions about concrete driveways, slabs, paths and patios.
Always offer to book a free quote. Be warm, professional, and Australian in tone.
Business hours: Mon-Fri 7am-5pm. Phone: 0424 459 772.""",
    'model': 'gpt-4o-mini',
    'temperature': 0.7,
    'max_tokens': 500,
    'enabled': True
}

def run():
    try:
        from playwright.sync_api import sync_playwright
    except ImportError:
        print("ERROR: Playwright not installed")
        return False
    
    results = {
        'timestamp': datetime.now().isoformat(),
        'steps': [],
        'errors': [],
        'screenshots': [],
        'success': False
    }
    
    def log(msg):
        print(msg)
        results['steps'].append(msg)
    
    def screenshot(name):
        path = REPORT_DIR / f'{name}.png'
        try:
            page.screenshot(path=str(path), full_page=True)
            results['screenshots'].append(name)
            log(f"Screenshot: {name}")
        except Exception as e:
            log(f"Screenshot error ({name}): {e}")
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True, args=['--no-sandbox', '--disable-gpu'])
        context = browser.new_context(viewport={'width': 1920, 'height': 1080})
        page = context.new_page()
        
        try:
            # Step 1: Navigate to login
            log("[1/7] Navigating to GHL login...")
            page.goto('https://app.gohighlevel.com/', timeout=30000)
            page.wait_for_load_state('load', timeout=20000)
            page.wait_for_selector('input[name="email"]', timeout=15000)
            time.sleep(1)
            screenshot('01_login_ready')
            
            # Step 2: Enter credentials
            log("[2/7] Filling credentials...")
            email_input = page.query_selector('input[name="email"]')
            password_input = page.query_selector('input[name="password"]')
            
            if email_input and password_input:
                email_input.fill(GHL_EMAIL)
                time.sleep(0.5)
                password_input.fill(GHL_PASSWORD)
                log(f"Credentials filled for: {GHL_EMAIL}")
                screenshot('02_credentials_entered')
            else:
                raise Exception("Input fields not found")
            
            # Step 3: Submit login
            log("[3/7] Submitting login...")
            submit_btn = page.query_selector('button[type="submit"]')
            if submit_btn:
                submit_btn.click()
            else:
                page.press('input[name="password"]', 'Enter')
            
            page.wait_for_load_state('load', timeout=25000)
            time.sleep(3)
            screenshot('03_after_login')
            log(f"Logged in successfully (URL: {page.url})")
            
            # Step 4: Navigate to Conversation AI
            log("[4/7] Navigating to Conversation AI settings...")
            conv_ai_url = f'https://app.gohighlevel.com/location/{LOCATION_ID}/conversations/ai'
            page.goto(conv_ai_url, timeout=25000)
            page.wait_for_load_state('load', timeout=15000)
            time.sleep(2)
            screenshot('04_conversation_ai_page')
            log(f"Conversation AI page loaded: {page.url}")
            
            # Step 5: Look for create bot interface
            log("[5/7] Looking for bot creation controls...")
            
            # Wait for any buttons or create interface
            try:
                page.wait_for_selector('button', timeout=5000)
                log("Buttons detected on page")
            except:
                log("No buttons detected yet, may be loading...")
            
            time.sleep(1)
            screenshot('05_conversation_ai_full')
            
            # Get all buttons and look for create
            buttons = page.query_selector_all('button')
            log(f"Found {len(buttons)} buttons on page")
            
            create_btn = None
            for btn in buttons:
                text = (btn.text_content() or '').lower().strip()
                if any(word in text for word in ['create', 'new', 'add', 'bot']):
                    create_btn = btn
                    log(f"Found button: {text}")
                    break
            
            if create_btn:
                log("Clicking create button...")
                create_btn.click()
                page.wait_for_load_state('load', timeout=10000)
                time.sleep(1)
                screenshot('06_bot_creation_dialog')
            else:
                log("No create button found - checking if form is visible")
                screenshot('06_looking_for_form')
            
            # Step 6: Try to configure bot
            log("[6/7] Configuring bot details...")
            
            # Look for name field
            name_inputs = page.query_selector_all('input[type="text"]')
            if name_inputs:
                name_inputs[0].fill(BOT_CONFIG['name'])
                log(f"Bot name entered: {BOT_CONFIG['name']}")
            
            # Look for textarea (system prompt)
            textareas = page.query_selector_all('textarea')
            if textareas:
                textareas[0].fill(BOT_CONFIG['system_prompt'])
                log("System prompt entered")
            
            screenshot('07_bot_config_fields')
            
            # Step 7: Save bot
            log("[7/7] Attempting to save bot...")
            
            save_buttons = page.query_selector_all('button')
            save_btn = None
            for btn in save_buttons:
                text = (btn.text_content() or '').lower().strip()
                if any(word in text for word in ['save', 'create', 'done', 'submit']):
                    save_btn = btn
                    log(f"Found save button: {text}")
                    break
            
            if save_btn:
                save_btn.click()
                page.wait_for_load_state('load', timeout=10000)
                time.sleep(2)
                log("Bot creation submitted")
                screenshot('08_bot_saved')
            else:
                log("No save button found - form may need manual submission")
                screenshot('08_no_save_button')
            
            results['success'] = True
            log("=== Conversation AI Setup Complete ===")
            
        except Exception as e:
            import traceback
            log(f"ERROR: {e}")
            results['errors'].append(str(e))
            try:
                screenshot('error_final')
            except:
                pass
        
        finally:
            browser.close()
    
    # Save report
    report_file = REPORT_DIR / 'report.json'
    with open(report_file, 'w') as f:
        json.dump(results, f, indent=2)
    
    # Print summary
    print("\n" + "="*70)
    print("GHL Conversation AI Setup - EXECUTION SUMMARY")
    print("="*70)
    print(f"Report:     {REPORT_DIR}")
    print(f"Screenshots: {len(results['screenshots'])}")
    print(f"Steps:      {len(results['steps'])}")
    print(f"Errors:     {len(results['errors'])}")
    print(f"Success:    {results['success']}")
    print("="*70)
    print("\nExecution Log:")
    for i, step in enumerate(results['steps'], 1):
        print(f"  {i:2d}. {step}")
    
    if results['errors']:
        print("\nErrors encountered:")
        for err in results['errors']:
            print(f"  - {err[:100]}")
    
    print("\nScreenshots captured:")
    for ss in results['screenshots']:
        print(f"  - {ss}.png")
    
    return results['success']

if __name__ == '__main__':
    print(f"GHL Conversation AI Setup Script")
    print(f"Email:       {GHL_EMAIL}")
    print(f"Location:    {LOCATION_ID}")
    print(f"Bot Name:    {BOT_CONFIG['name']}")
    print("="*70)
    
    success = run()
    sys.exit(0 if success else 1)
