# -*- coding: utf-8 -*-
"""지오영 JavaScript에서 장바구니 추가 함수 찾기"""

import requests
from bs4 import BeautifulSoup
import asyncio
from playwright.async_api import async_playwright
import re

async def analyze_js():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()
        
        # 로그인
        await page.goto('https://gwn.geoweb.kr/Member/Login')
        await page.fill('input[type="text"]', '7390')
        await page.fill('input[type="password"]', 'trajet6640')
        await page.click('button, input[type="submit"]')
        await page.wait_for_load_state('networkidle')
        
        # 메인 페이지
        await page.goto('https://gwn.geoweb.kr/Home/Index')
        await page.wait_for_timeout(3000)
        
        # 모든 스크립트 태그 내용 가져오기
        scripts = await page.evaluate('''() => {
            var result = [];
            var scripts = document.querySelectorAll('script');
            scripts.forEach(s => {
                if (s.src) {
                    result.push({type: 'src', url: s.src});
                }
                if (s.textContent && s.textContent.length > 100) {
                    result.push({type: 'inline', content: s.textContent});
                }
            });
            return result;
        }''')
        
        print(f"스크립트 {len(scripts)}개 발견")
        
        # 장바구니 관련 함수 찾기
        for s in scripts:
            if s['type'] == 'inline':
                content = s['content']
                # 담기, Cart, Add 관련 찾기
                if '담기' in content or 'AddCart' in content or 'addCart' in content or 'InsertOrder' in content:
                    print("\n" + "="*60)
                    print("장바구니 관련 스크립트 발견!")
                    print("="*60)
                    
                    # 함수 정의 찾기
                    func_patterns = [
                        r'function\s+(\w*[Cc]art\w*)\s*\([^)]*\)\s*{[^}]+}',
                        r'function\s+(\w*[Aa]dd\w*)\s*\([^)]*\)\s*{[^}]+}',
                        r'(\w+)\s*=\s*function\s*\([^)]*\)\s*{[^}]*[Cc]art[^}]*}',
                    ]
                    
                    for pattern in func_patterns:
                        matches = re.findall(pattern, content, re.DOTALL)
                        for m in matches:
                            print(f"함수 발견: {m}")
                    
                    # ajax 호출 찾기
                    ajax_pattern = r'\$\.ajax\s*\(\s*{[^}]+url[^}]+}'
                    ajax_matches = re.findall(ajax_pattern, content, re.DOTALL)
                    for m in ajax_matches:
                        if 'cart' in m.lower() or 'order' in m.lower() or 'add' in m.lower():
                            print(f"\nAJAX 호출:\n{m[:500]}")
                    
                    # 일부 내용 출력
                    lines = content.split('\n')
                    for i, line in enumerate(lines):
                        if '담기' in line or 'addCart' in line.lower() or 'insertorder' in line.lower():
                            print(f"\n관련 라인 {i}:")
                            print('\n'.join(lines[max(0,i-3):min(len(lines),i+10)]))
        
        # 외부 JS 파일 확인
        print("\n" + "="*60)
        print("외부 스크립트 파일:")
        print("="*60)
        for s in scripts:
            if s['type'] == 'src':
                print(s['url'])
        
        await browser.close()

if __name__ == "__main__":
    asyncio.run(analyze_js())
