import os
import sys
import tempfile
import pytest

# 테스트 임시 DB 경로를 import 전에 주입
# mkstemp으로 충돌 없는 고유 경로 확보 후 SQLite가 직접 생성하도록 즉시 삭제
_fd, _TMP_DB = tempfile.mkstemp(suffix=".db")
os.close(_fd)
os.unlink(_TMP_DB)
os.environ["REALESTATE_DB_PATH"] = _TMP_DB

# app 패키지 import 가능하게 PYTHONPATH 보정
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))


# 테이블 목록 — init_db가 생성하는 모든 테이블
_USER_TABLES = (
    "listing_matches",      # FK CASCADE 대비 자식 테이블 먼저
    "listings",
    "market_deals",
    "listing_criteria",
    "listing_collect_log",
    "match_results",       # FK CASCADE 대비 자식 테이블 먼저
    "announcement_models",
    "announcements",
    "user_profile",
    "collect_log",
)


@pytest.fixture(autouse=True)
def _clean_db():
    """각 테스트마다 DB 테이블 비우기. 파일 삭제 대신 TRUNCATE 패턴 사용해
    Windows SQLite 파일 잠금 이슈를 회피한다."""
    # deferred to ensure REALESTATE_DB_PATH is set before first module load
    from app.db import _conn, init_db
    init_db()
    with _conn() as conn:
        for table in _USER_TABLES:
            conn.execute(f"DELETE FROM {table}")
    yield
