"""
A simple async Python wrapper for nekos.best API.
Copyright (C) 2021  PredaaA

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program.  If not, see <https://www.gnu.org/licenses/>.
"""

from .http import HttpClient
from .models import Categories, Result


class Client:
    """Client to make requests to nekos.best API."""

    def __init__(self):
        self.http = HttpClient()

    async def teardown(self):
        """
        |coro|
        
        A function to cleanup our http session.
        """
        await self.http.session.close()

    async def get_image(self, category: str) -> Result:
        """
        |coro|
        
        Returns an image URL of a specific category.

        Parameters
        ----------
        category: str
            The category of image you want to get.
        
        Returns
        -------
        nekosbest.Result
        """
        if not Categories.has_value(category):
            raise TypeError("This isn't a valid category.")

        result = await self.http.get(category)
        return Result(result)
