-- Phase 0.3: 검색 실패 자동 로깅
--
-- 목적: gold dataset 시드 수집. 평가셋(tests/search_eval/queries.yaml) 확장 재료.
-- 자동 수집 트리거:
--   1) result_count = 0          → failure_reason = 'no_result'
--   2) confidence < 0.5          → failure_reason = 'low_confidence'
--   3) 같은 사용자 60초 내 재쿼리 → failure_reason = 'user_reformulated' (이전 쿼리 기록)
--
-- confidence는 Phase 0.3 시점엔 휴리스틱(top score 기반).
-- Phase 2 QueryAnalyzer 도입 후 LLM 기반 confidence로 교체될 예정.

CREATE TABLE IF NOT EXISTS search_failure_logs (
    id              BIGSERIAL PRIMARY KEY,
    query           TEXT      NOT NULL,
    user_id         BIGINT    REFERENCES users(id) ON DELETE SET NULL,
    created_at      TIMESTAMPTZ NOT NULL DEFAULT NOW(),
    result_count    INTEGER   NOT NULL,
    confidence      DOUBLE PRECISION,           -- 0..1, NULL이면 미산정
    failure_reason  VARCHAR(30) NOT NULL,       -- no_result | low_confidence | user_reformulated
    context         JSONB,                      -- top_score, mode, returned_ids[], reformulated_to 등
    reviewed        BOOLEAN   NOT NULL DEFAULT FALSE  -- 평가셋에 흡수되었는지 표시
);

-- 사용자별 시간순 조회 (recent failures, 동일 사용자 패턴 분석)
CREATE INDEX IF NOT EXISTS idx_search_failure_user_time
    ON search_failure_logs (user_id, created_at DESC);

-- failure_reason별 집계 (대시보드/리포트)
CREATE INDEX IF NOT EXISTS idx_search_failure_reason
    ON search_failure_logs (failure_reason, created_at DESC);

-- 미리뷰 항목 우선 노출 (gold dataset 큐레이션 작업 큐)
CREATE INDEX IF NOT EXISTS idx_search_failure_unreviewed
    ON search_failure_logs (created_at DESC)
    WHERE reviewed = FALSE;
