# -*- coding: utf-8 -*-
"""
STEP102-03c
tools/backfill_complex_address_cache.py

blog_realtor_articles.raw_json 기준으로 blog_complex_address_cache를 선보강한다.

사용:
cd /d D:\honghee\blog_api
python tools\backfill_complex_address_cache.py --limit 20

주의:
- publish_worker.py 영향 없음
- 실패 매물은 건너뜀
- raw_json이 있는 detail_collected 매물 우선 처리
"""

import argparse
import logging
import sys
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]
sys.path.insert(0, str(ROOT))

from db import get_conn
from services.complex_address_cache_bridge import ensure_article_complex_address_cache


def fetch_recent_articles(conn, limit: int):
    """
    실제 운영 테이블:
    blog_realtor_articles.raw_json
    """
    sql = """
        SELECT
            article_no,
            raw_json
        FROM blog_realtor_articles
        WHERE raw_json IS NOT NULL
          AND raw_json <> ''
        ORDER BY
            detail_collected_at DESC,
            updated_at DESC,
            id DESC
        LIMIT %s
    """

    with conn.cursor() as cur:
        cur.execute(sql, (limit,))
        return cur.fetchall()


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--limit", type=int, default=20)
    parser.add_argument("--force-refresh", action="store_true")
    args = parser.parse_args()

    logging.basicConfig(level=logging.INFO, format="%(message)s")

    conn = get_conn()
    try:
        rows = fetch_recent_articles(conn, args.limit)
        print(f"[BACKFILL] target rows={len(rows)}")

        success = 0
        skipped = 0

        for row in rows:
            article_no = str(row.get("article_no") or "")
            raw_json = row.get("raw_json")

            result = ensure_article_complex_address_cache(
                conn,
                article_no=article_no,
                article_data=raw_json,
                force_refresh=args.force_refresh,
            )

            if result:
                success += 1
                print(f"[OK] {article_no} -> {result.get('resolved_address')}")
            else:
                skipped += 1
                print(f"[SKIP] {article_no}")

        print(f"[DONE] success={success} skipped={skipped}")

    finally:
        conn.close()


if __name__ == "__main__":
    main()
