from app.schema import validate_interpretation


def _valid_card():
    return {
        "position": "과거", "card": "the-fool", "reversed": False,
        "interpretation": "...", "advice": "...",
        "evidence": {
            "card_meaning_used": "새 시작",
            "position_logic": "...",
            "category_lens": "...",
        },
    }


def _valid_payload():
    return {
        "summary": "...",
        "cards": [_valid_card()],
        "interactions": [{"type": "synergy", "between": ["a", "b"], "explanation": "..."}],
        "advice": "...",
        "confidence": "medium",
    }


def test_valid_three_card():
    ok, _ = validate_interpretation(_valid_payload(), "three_card")
    assert ok is True


def test_missing_summary():
    p = _valid_payload(); del p["summary"]
    ok, err = validate_interpretation(p, "three_card")
    assert not ok and "summary" in err


def test_invalid_confidence():
    p = _valid_payload(); p["confidence"] = "extreme"
    ok, err = validate_interpretation(p, "three_card")
    assert not ok and "confidence" in err


def test_three_card_empty_interactions():
    p = _valid_payload(); p["interactions"] = []
    ok, err = validate_interpretation(p, "three_card")
    assert not ok and "interactions" in err


def test_one_card_empty_interactions_ok():
    p = _valid_payload(); p["interactions"] = []
    ok, _ = validate_interpretation(p, "one_card")
    assert ok is True


def test_card_evidence_missing_field():
    p = _valid_payload()
    del p["cards"][0]["evidence"]["category_lens"]
    ok, err = validate_interpretation(p, "three_card")
    assert not ok and "category_lens" in err
