# -*- coding: utf-8 -*-
"""rx-usage 페이지 Playwright 테스트"""
from playwright.sync_api import sync_playwright
import time
import json

def test_rx_usage_quick_order():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)  # 화면 보이게
        page = browser.new_page()
        
        # 콘솔 로그 캡처
        page.on("console", lambda msg: print(f"[CONSOLE] {msg.type}: {msg.text}"))
        
        # 네트워크 요청/응답 캡처
        def log_response(response):
            if 'api/order' in response.url or 'quick-submit' in response.url:
                print(f"\n[RESPONSE] {response.url}")
                print(f"  Status: {response.status}")
                try:
                    body = response.json()
                    print(f"  Body: {json.dumps(body, ensure_ascii=False, indent=2)}")
                except:
                    print(f"  Body: {response.text()[:500]}")
        
        page.on("response", log_response)
        
        print("="*60)
        print("1. rx-usage 페이지 접속")
        print("="*60)
        page.goto("http://localhost:7001/admin/rx-usage")
        page.wait_for_load_state("networkidle")
        time.sleep(2)
        
        print("\n" + "="*60)
        print("2. 데이터 로드 (조회 버튼 클릭)")
        print("="*60)
        # 조회 버튼 클릭
        search_btn = page.locator("button:has-text('조회')")
        if search_btn.count() > 0:
            search_btn.first.click()
            time.sleep(3)
        
        print("\n" + "="*60)
        print("3. 첫 번째 품목 행 더블클릭 (도매상 모달 열기)")
        print("="*60)
        # 테이블 행 찾기
        rows = page.locator("tr[data-idx]")
        row_count = rows.count()
        print(f"  품목 수: {row_count}")
        
        if row_count > 0:
            # 첫 번째 품목 더블클릭
            rows.first.dblclick()
            time.sleep(3)
            
            print("\n" + "="*60)
            print("4. 도매상 모달에서 지오영 품목 확인")
            print("="*60)
            
            # 지오영 테이블에서 재고 있는 품목 찾기
            geo_rows = page.locator(".geo-table tbody tr:not(.no-stock)")
            geo_count = geo_rows.count()
            print(f"  지오영 재고 있는 품목: {geo_count}개")
            
            if geo_count > 0:
                # 첫 번째 품목 정보 출력
                first_row = geo_rows.first
                product_name = first_row.locator(".geo-name").text_content()
                stock = first_row.locator(".geo-stock").text_content()
                print(f"  선택할 품목: {product_name}, 재고: {stock}")
                
                print("\n" + "="*60)
                print("5. '담기' 버튼 클릭")
                print("="*60)
                add_btn = first_row.locator("button.geo-add-btn")
                if add_btn.count() > 0:
                    add_btn.click()
                    time.sleep(1)
                    
                    # prompt 창에 수량 입력 (기본값 사용)
                    page.on("dialog", lambda dialog: dialog.accept())
                    time.sleep(2)
        
        print("\n" + "="*60)
        print("6. 장바구니 확인")
        print("="*60)
        cart_items = page.locator(".cart-item")
        cart_count = cart_items.count()
        print(f"  장바구니 품목: {cart_count}개")
        
        if cart_count > 0:
            print("\n" + "="*60)
            print("7. 퀵주문 버튼 클릭!")
            print("="*60)
            
            # 퀵주문 버튼 찾기
            quick_order_btn = page.locator("button.cart-item-order").first
            if quick_order_btn.count() > 0:
                quick_order_btn.click()
                time.sleep(1)
                
                # confirm 대화상자 수락
                page.on("dialog", lambda dialog: dialog.accept())
                time.sleep(5)
                
                print("\n" + "="*60)
                print("8. 결과 확인")
                print("="*60)
                
                # 토스트 메시지 확인
                toast = page.locator(".toast")
                if toast.count() > 0:
                    toast_text = toast.text_content()
                    print(f"  토스트 메시지: {toast_text}")
        
        print("\n테스트 완료. 10초 후 브라우저 닫힘...")
        time.sleep(10)
        browser.close()

if __name__ == "__main__":
    test_rx_usage_quick_order()
