from app.api.v1.consistency import _fingerprint, _similarity, _compare, ConsistencyCheckPayload

def test_fingerprint_is_deterministic():
    samples = [0.1, -0.2, 0.3] * 1000
    a = _fingerprint(24000, samples)
    b = _fingerprint(24000, samples)
    assert a["fingerprint"] == b["fingerprint"]
    assert a["sample_rate"] == 24000

def test_identical_audio_has_full_similarity():
    samples = [0.1, -0.2, 0.3] * 1000
    fp = _fingerprint(24000, samples)
    assert _similarity(fp, fp) == 1.0

def test_consistency_passes_identical_profile():
    samples = [0.1, -0.2, 0.3] * 1000
    fp = _fingerprint(24000, samples)
    payload = ConsistencyCheckPayload(
        voice_id="CVOICE-TAM-M-AD-CHE-TEL-A50-001",
        reference_audio="reference.wav",
        generated_audio="generated.wav",
    )
    result = _compare(fp, fp, payload)
    assert result["status"] == "PASS"
    assert all(result["checks"].values())

def test_consistency_warns_for_large_rms_delta():
    samples = [0.1, -0.2, 0.3] * 1000
    ref = _fingerprint(24000, samples)
    generated = dict(ref)
    generated["rms_db"] = ref["rms_db"] - 20
    payload = ConsistencyCheckPayload(
        voice_id="CVOICE-TAM-M-AD-CHE-TEL-A50-001",
        reference_audio="reference.wav",
        generated_audio="generated.wav",
    )
    result = _compare(ref, generated, payload)
    assert result["status"] == "WARNING"
