"""
Methods for the issues namespace

https://docs.github.com/en/rest/reference/pulls
"""

from typing import Any, Dict, List

from ..const import GitHubRequestKwarg, RepositoryType
from ..helpers import repository_full_name
from ..models.pull_request import GitHubPullRequestModel
from ..models.response import GitHubResponseModel
from .base import BaseNamespace


class GitHubPullsNamespace(BaseNamespace):
    """
    Methods for the pull requests namespace

    The Pull Request API allows you to list, view, edit, create,
    and even merge pull requests. Comments on pull requests
    can be managed via the issues namespace.
    """

    async def list(
        self,
        repository: RepositoryType,
        **kwargs: Dict[GitHubRequestKwarg, Any],
    ) -> GitHubResponseModel[List[GitHubPullRequestModel]]:
        """
         List pull requests

         **Arguments**:

         `repository`

         The repository to return pull requests from, example "octocat/hello-world"

        https://docs.github.com/en/rest/reference/pulls#list-pull-requests
        """
        response = await self._client.async_call_api(
            endpoint=f"/repos/{repository_full_name(repository)}/pulls",
            **kwargs,
        )
        response.data = [GitHubPullRequestModel(data) for data in response.data]
        return response
