import datetime as dt
import decimal

from app.results.serializer import serialize_rows


def test_decimal_integral_becomes_int():
    rows = serialize_rows([{"amount": decimal.Decimal("100")}])
    assert rows[0]["amount"] == 100
    assert isinstance(rows[0]["amount"], int)


def test_decimal_fractional_becomes_float():
    rows = serialize_rows([{"amount": decimal.Decimal("99.95")}])
    assert rows[0]["amount"] == 99.95
    assert isinstance(rows[0]["amount"], float)


def test_date_becomes_iso_string():
    rows = serialize_rows([{"hired_at": dt.date(2026, 1, 15)}])
    assert rows[0]["hired_at"] == "2026-01-15"


def test_datetime_becomes_iso_string():
    rows = serialize_rows([{"created_at": dt.datetime(2026, 1, 15, 10, 30)}])
    assert rows[0]["created_at"] == "2026-01-15T10:30:00"


def test_bytes_becomes_base64():
    rows = serialize_rows([{"blob": b"hello"}])
    assert rows[0]["blob"] == "aGVsbG8="


def test_none_and_primitives_pass_through():
    rows = serialize_rows([{"a": None, "b": "text", "c": 5, "d": 1.5, "e": True}])
    assert rows[0] == {"a": None, "b": "text", "c": 5, "d": 1.5, "e": True}
