"""Custom GraphQL scalar types."""

import json
from datetime import datetime

import strawberry


@strawberry.scalar(
    description="DateTime scalar for date and time values",
    serialize=lambda v: v.isoformat() if v else None,
    parse_value=lambda v: datetime.fromisoformat(v) if v else None,
)
class DateTime:
    """DateTime scalar type."""

    pass


@strawberry.scalar(
    description="JSON scalar for arbitrary JSON data",
    serialize=lambda v: v,
    parse_value=lambda v: v if isinstance(v, dict | list) else json.loads(v) if v else None,
)
class JSON:
    """JSON scalar type for arbitrary JSON data."""

    pass
