import pytest
from pydantic import ValidationError
from src.apps.records.schemas.requests import (
    CreateRecordRequest,
    CreateFamilyContactRequest,
    CreateBurialInfoRequest,
    UpdateRecordRequest,
)


def test_create_record_invalid_status():
    with pytest.raises(ValidationError):
        CreateRecordRequest(first_name="John", last_name="Doe", status="invalid")


def test_create_record_invalid_visibility_config():
    with pytest.raises(ValidationError):
        CreateRecordRequest(first_name="John", last_name="Doe", visibility_config="unknown")


def test_create_record_first_name_too_long():
    with pytest.raises(ValidationError):
        CreateRecordRequest(first_name="J" * 101, last_name="Doe")


def test_create_family_contact_invalid_email():
    with pytest.raises(ValidationError):
        CreateFamilyContactRequest(first_name="Jane", last_name="Doe", email="not-an-email")


def test_create_burial_info_service_notes_too_long():
    with pytest.raises(ValidationError):
        CreateBurialInfoRequest(service_notes="x" * 2001)


# INDL-04: UpdateFamilyContactRequest validation
def test_update_contact_email_invalid():
    from src.apps.records.schemas.requests import UpdateFamilyContactRequest
    with pytest.raises(ValidationError):
        UpdateFamilyContactRequest(email="not-an-email")


def test_update_contact_extra_fields_rejected():
    from src.apps.records.schemas.requests import UpdateFamilyContactRequest
    with pytest.raises(ValidationError):
        UpdateFamilyContactRequest(tenant_id="00000000-0000-0000-0000-000000000000")


def test_update_contact_name_max_length():
    from src.apps.records.schemas.requests import UpdateFamilyContactRequest
    with pytest.raises(ValidationError):
        UpdateFamilyContactRequest(first_name="A" * 101)


def test_update_record_extra_fields_rejected():
    with pytest.raises(ValidationError):
        UpdateRecordRequest(unknown_field="injection")


def test_update_burial_extra_fields_rejected():
    from src.apps.records.schemas.requests import UpdateBurialInfoRequest
    with pytest.raises(ValidationError):
        UpdateBurialInfoRequest(unknown_field="injection")
