import base64
import io

from PIL import Image

from app.services.captcha import (
    CAPTCHA_FONT_SIZE,
    CAPTCHA_HEIGHT,
    CAPTCHA_WIDTH,
    load_captcha_font,
    make_captcha,
    verify_captcha,
)


def test_captcha_can_only_be_used_once():
    captcha = make_captcha()
    captcha_id = captcha["captcha_id"]
    # The real code is intentionally not exposed. This test locks in one-time consumption behavior.
    assert not verify_captcha(captcha_id, "bad")
    assert not verify_captcha(captcha_id, "bad")


def test_captcha_uses_large_font_and_expected_image_size():
    captcha = make_captcha()
    encoded_image = captcha["image"].split(",", 1)[1]
    image = Image.open(io.BytesIO(base64.b64decode(encoded_image)))

    assert image.size == (CAPTCHA_WIDTH, CAPTCHA_HEIGHT)
    assert getattr(load_captcha_font(), "size", CAPTCHA_FONT_SIZE) == CAPTCHA_FONT_SIZE
