"""
估價師證書查詢 - 使用 Playwright + Claude 視覺辨識驗證碼
通過檔案系統進行通信，保持瀏覽器 session 不中斷
"""
import sys
sys.stdout.reconfigure(encoding='utf-8')

from playwright.sync_api import sync_playwright
import time
import os
import json
from pathlib import Path

# 設定
CAPTCHA_IMAGE = 'captcha_to_read.png'
CAPTCHA_ANSWER = 'captcha_answer.txt'
RESULT_FILE = 'query_result.json'
TIMEOUT_SECONDS = 120  # 等待驗證碼輸入的最長時間

def cleanup():
    """清理暫存檔案"""
    for f in [CAPTCHA_IMAGE, CAPTCHA_ANSWER, RESULT_FILE]:
        if os.path.exists(f):
            os.remove(f)

def wait_for_captcha_answer(timeout=TIMEOUT_SECONDS):
    """等待 Claude 辨識驗證碼並寫入答案"""
    print(f'  等待驗證碼輸入（最長 {timeout} 秒）...')
    start = time.time()
    while time.time() - start < timeout:
        if os.path.exists(CAPTCHA_ANSWER):
            with open(CAPTCHA_ANSWER, 'r') as f:
                answer = f.read().strip()
            if answer:
                return answer
        time.sleep(0.5)
    return None

def query_appraiser(name):
    """查詢單一估價師"""
    cleanup()

    print(f'\n=== 查詢估價師: {name} ===')

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page()

        print('1. 前往查詢頁面...')
        page.goto('https://resim.moi.gov.tw/Home/AssessIndex')
        page.wait_for_load_state('networkidle')

        print('2. 點擊證書資料查詢...')
        page.click('text=證書資料查詢')
        page.wait_for_timeout(1500)

        print(f'3. 輸入姓名: {name}')
        page.fill('#assess_name', name)

        print('4. 截圖驗證碼...')
        page.locator('#vCodeView').screenshot(path=CAPTCHA_IMAGE)
        print(f'   已保存: {CAPTCHA_IMAGE}')
        print('   >>> 請 Claude 讀取此圖片並將驗證碼寫入 captcha_answer.txt <<<')

        # 等待驗證碼答案
        captcha = wait_for_captcha_answer()

        if not captcha:
            print('❌ 等待驗證碼超時')
            browser.close()
            return None

        print(f'5. 收到驗證碼: {captcha}')
        page.fill('#codenumber', captcha)

        print('6. 點擊查詢...')
        page.click('#subb')
        page.wait_for_timeout(3000)

        # 截圖結果
        page.screenshot(path='result_page.png')

        # 檢查結果
        print('7. 擷取結果...')
        result = None
        page_content = page.content()

        if '驗證碼錯誤' in page_content or '驗證碼輸入錯誤' in page_content:
            print('❌ 驗證碼錯誤')
        else:
            rows = page.locator('table tr').all()
            for row in rows:
                cells = row.locator('td').all()
                if len(cells) >= 5:
                    texts = [cell.text_content().strip() for cell in cells]
                    if name in texts[0]:
                        result = {
                            '姓名': texts[0],
                            '英文姓名': texts[1],
                            '估價師證書字號': texts[2],
                            '考試院證書字號': texts[3],
                            '證書狀態': texts[4]
                        }
                        print('✓ 查詢成功！')
                        for k, v in result.items():
                            print(f'  {k}: {v}')
                        break

        browser.close()

        # 保存結果
        if result:
            with open(RESULT_FILE, 'w', encoding='utf-8') as f:
                json.dump(result, f, ensure_ascii=False, indent=2)

        return result

if __name__ == '__main__':
    import sys
    name = sys.argv[1] if len(sys.argv) > 1 else '黃薇'
    query_appraiser(name)
