# generated by datamodel-codegen:
#   filename:  api.json

"""Endpoints of the pets operations; regenerate them instead of editing."""

from collections.abc import Sequence
from typing import Annotated, Final

import models
from fastapi import APIRouter, Query, params

from .._generated import contract
from .._generated.contract import OperationDependencies
from .._runtime.server.application import Wiring, build, checked
from .._runtime.server.responses import dispatch
from ..services import PetsService


def _add_list_pets(
    router: APIRouter,
    wiring: Wiring,
) -> None:
    pets: PetsService = wiring.services['pets']
    list_pets_handler = checked(
        pets.list_pets,
        'The pets.list_pets method of GET /pets',
        ('q_',),
    )

    def list_pets(
        *,
        q_: Annotated[str | None, Query(alias='q𞓐')] = None,
    ) -> object:
        return dispatch(
            list_pets_handler(
                q_=q_,
            ),
            contract.ListPets.RESPONSES,
        )

    router.add_api_route(
        '/pets',
        list_pets,
        methods=['GET'],
        status_code=200,
        response_model=models.PetsGetResponse,
        response_model_by_alias=True,
        response_model_exclude_unset=True,
        operation_id='listPets',
        tags=['pets'],
        summary='List 𞓐 pets',
        response_description='ok 𞓐',
        dependencies=wiring.dependencies.get('list_pets'),
    )


LITERAL_ROUTES: Final = (
    ('list_pets', _add_list_pets),
)
TEMPLATED_ROUTES: Final = ()


def build_router(
    *,
    pets: PetsService,
    dependencies: Sequence[params.Depends] = (),
    operation_dependencies: OperationDependencies | None = None,
    prefix: str = "",
) -> APIRouter:
    """Register the pets operations on a new router, literal paths first."""
    return build(
        (*LITERAL_ROUTES, *TEMPLATED_ROUTES),
        services={'pets': pets},
        dependencies=dependencies,
        operation_dependencies=operation_dependencies,
        prefix=prefix,
    )
