-- 287_study_memo_cards.sql
-- 공부 암기노트 Phase 1: 추출 플래시카드 본체 (FK 트리 루트).
--
-- 출처(source_kind): question (P1 활성) / subject_note / document (P3 예약).
-- 포맷(format): qa (cue->fact) / cloze (빈칸). 강한 enum 미사용 — read-time 매핑.
-- needs_review DEFAULT true: 생성물이라 추출 직후 검토 대기 (study_questions 의 false 와 반대).
-- source_generated_at: 추출 당시 study_questions.ai_explanation_generated_at — stale 판정/버전 핀.
-- source_question_id 만 nullable + ON DELETE CASCADE (문제 물리삭제 시 카드 동반삭제;
--   단 study_questions 는 soft-delete 만이라 실전은 정정/삭제 훅이 needs_review 마킹).
-- 인용(evidence) 은 별 테이블 study_memo_card_evidence (append-only).

CREATE TABLE IF NOT EXISTS study_memo_cards (
    id                      BIGSERIAL    PRIMARY KEY,
    user_id                 BIGINT       NOT NULL REFERENCES users(id)        ON DELETE CASCADE,
    study_topic_id          BIGINT       NOT NULL REFERENCES study_topics(id) ON DELETE CASCADE,

    source_kind             VARCHAR(40)  NOT NULL,
    source_question_id      BIGINT       REFERENCES study_questions(id) ON DELETE CASCADE,
    source_subject_note_id  BIGINT,

    format                  VARCHAR(20)  NOT NULL,
    cue                     TEXT         NOT NULL,
    fact                    TEXT         NOT NULL,
    cloze_text              TEXT,
    extra                   JSONB,

    source_generated_at     TIMESTAMPTZ,
    dedup_hash              VARCHAR(64)  NOT NULL,

    needs_review            BOOLEAN      NOT NULL DEFAULT true,
    flagged_at              TIMESTAMPTZ,
    flagged_by              VARCHAR(40),

    model                   VARCHAR(120),
    generated_at            TIMESTAMPTZ,
    created_at              TIMESTAMPTZ  NOT NULL DEFAULT now(),
    deleted_at              TIMESTAMPTZ
);
