"""
Methods for the traffic namespace

https://docs.github.com/en/rest/reference/repos#traffic
"""

from __future__ import annotations

from typing import Any, Dict

from ..const import GitHubRequestKwarg, RepositoryType
from ..models.clones import GitHubClonesModel
from ..models.response import GitHubResponseModel
from ..models.views import GitHubViewsModel
from .base import BaseNamespace


class GitHubTrafficNamespace(BaseNamespace):
    """Methods for the traffic namespace"""

    async def clones(
        self,
        repository: RepositoryType,
        **kwargs: Dict[GitHubRequestKwarg, Any],
    ) -> GitHubResponseModel[GitHubClonesModel]:
        """
        Get repository clones

        Get the total number of clones and breakdown per day or week for the last 14 days.
        Timestamps are aligned to UTC midnight of the beginning of the day or week.
        Week begins on Monday.

         **Arguments**:

         `repository`

         The repository to return clones for, example "octocat/hello-world"

        https://docs.github.com/en/rest/reference/git#get-a-tree
        """
        response = await self._client.async_call_api(
            endpoint=f"/repos/{repository}/traffic/clones",
            **kwargs,
        )
        response.data = GitHubClonesModel(response.data)
        return response

    async def views(
        self,
        repository: RepositoryType,
        **kwargs: Dict[GitHubRequestKwarg, Any],
    ) -> GitHubResponseModel[GitHubViewsModel]:
        """
        Get page views

        Get the total number of views and breakdown per day or week for the last 14 days.
        Timestamps are aligned to UTC midnight of the beginning of the day or week.
        Week begins on Monday.

         **Arguments**:

         `repository`

         The repository to return views for, example "octocat/hello-world"

        https://docs.github.com/en/rest/reference/git#get-a-tree
        """
        response = await self._client.async_call_api(
            endpoint=f"/repos/{repository}/traffic/views",
            **kwargs,
        )
        response.data = GitHubViewsModel(response.data)
        return response
