#!/usr/bin/env python3
"""
Playwright-based fetcher for njls.gov.cn list data.
"""
import sys, json, argparse

AJAX_URL = "http://www.njls.gov.cn/igs/front/search/publish/data/list.html"
PARAMS_TEMPLATE = {
    'index': 'wzqsearch-v20190124',
    'type': 'infomation',
    'siteId': '7',
    'pageSize': '20',
    'orderProperty': 'DOCRELTIME',
    'orderDirection': 'desc',
    'filter[SITEID]': '7',
    'filter[CHANNELID]': '23512',
    'filter[GROUPCAT]': '228',
}

JS_TEMPLATE = """
(async function() {
    var params = %s;
    params['pageNumber'] = '%d';
    var qs = Object.keys(params).map(function(k) {
        return k + '=' + encodeURIComponent(params[k]);
    }).join('&');
    var url = '%s?' + qs;
    try {
        var r = await fetch(url);
        var d = await r.json();
        return JSON.stringify({status: d.status, count: d.count, rows: d.rows});
    } catch(e) {
        return 'ERROR:' + e.message;
    }
})()
"""

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--pages', type=str, required=True, help='Comma-separated page numbers')
    args = parser.parse_args()
    
    page_nums = [int(p.strip()) for p in args.pages.split(',') if p.strip()]
    
    from playwright.sync_api import sync_playwright
    
    all_items = []
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        context = browser.new_context(
            user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36'
        )
        page = context.new_page()
        
        # Load the specific list page to establish session
        page.goto('http://www.njls.gov.cn/lsqrmzf/214/228/index_17658.html', 
                  wait_until='domcontentloaded', timeout=30000)
        
        for page_num in page_nums:
            js_code = JS_TEMPLATE % (
                json.dumps(PARAMS_TEMPLATE),
                page_num,
                AJAX_URL
            )
            
            try:
                resp = page.evaluate(js_code)
            except Exception as e:
                print(f"ERROR fetching page {page_num}: {e}", file=sys.stderr)
                continue
            
            if resp.startswith('ERROR:'):
                print(f"ERROR page {page_num}: {resp}", file=sys.stderr)
                continue
            
            try:
                data = json.loads(resp)
                rows = data.get('rows', [])
                print(f"  [FETCHER] Page {page_num}: {len(rows)} items", file=sys.stderr)
                
                for row in rows:
                    # Parse ISO date to YYYY-MM-DD
                    raw_date = row.get('DOCRELTIME', '') or ''
                    pub_date = raw_date[:10] if len(raw_date) >= 10 else raw_date
                    all_items.append({
                        'title': row.get('DOCTITLE', ''),
                        'url': row.get('DOCPUBURL', ''),
                        'content': row.get('DOCCONTENT', '') or '',
                        'pub_date': pub_date,
                        'attachments': [],
                    })
            except json.JSONDecodeError:
                print(f"ERROR parsing JSON from page {page_num}", file=sys.stderr)
        
        context.close()
        browser.close()
    
    print(json.dumps(all_items, ensure_ascii=False))

if __name__ == '__main__':
    main()
