import time

import httpx
from sqlalchemy import text

from app.database import SessionLocal

from .config import REQUEST_DELAY
from .state import ImportState
from common_logging import get_logger
logger = get_logger(__name__)




def run_phase2b(state: ImportState, base_url: str, token: str) -> None:
    if state.is_phase_done('2b'):
        logger.info('Phase 2b 已完成，跳过')
        return
    headers = {'Authorization': f'Bearer {token}', 'Content-Type': 'application/json'}
    updated = 0
    with SessionLocal() as db:
        rows = db.execute(text('\n            SELECT t.id, t.knowledge_doc_id, t.superseded_by_doc_id\n            FROM tax_documents t\n            WHERE t.is_imported = true\n              AND t.knowledge_doc_id IS NOT NULL\n              AND t.superseded_by_doc_id IS NOT NULL\n        ')).fetchall()
    logger.info(f'需要补填修订关系的文档: {len(rows)} 条')
    with httpx.Client(base_url=base_url, headers=headers, timeout=30, follow_redirects=True) as client:
        for row in rows:
            tax_id, knowledge_doc_id, superseded_by_dc_id = row
            with SessionLocal() as db:
                result = db.execute(text('SELECT knowledge_doc_id FROM tax_documents WHERE id=:id AND is_imported=true'), {'id': superseded_by_dc_id}).fetchone()
            if not result or not result[0]:
                logger.debug(f'被替代文档未导入: dc_id={superseded_by_dc_id}，跳过')
                continue
            superseded_by_kb_id = result[0]
            try:
                resp = client.put(f'/api/v1/knowledge/documents/{knowledge_doc_id}', json={'superseded_by_doc_id': superseded_by_kb_id})
                resp.raise_for_status()
                updated += 1
                logger.debug(f'补填修订关系: knowledge_doc_id={knowledge_doc_id} → superseded_by={superseded_by_kb_id}')
            except Exception as e:
                logger.error(f'补填失败: knowledge_doc_id={knowledge_doc_id} error={e}')
            time.sleep(REQUEST_DELAY)
    logger.info(f'✓ Phase 2b 完成：补填 {updated} 条修订关系')
    state.mark_phase_done('2b')
