from typing import *
import royalnet.commands as rc
import aiohttp
import io


class DogCommand(rc.Command):
    name: str = "dog"

    description: str = "Invia un cane della razza specificata in chat."

    syntax: str = "[razza]"

    async def run(self, args: rc.CommandArgs, data: rc.CommandData) -> None:
        breed = args.joined()
        if breed:
            url = f"https://dog.ceo/api/breed/{breed}/images/random"
        else:
            url = f"https://dog.ceo/api/breeds/image/random"

        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                if response.status >= 400:
                    raise rc.ExternalError(f"Request returned {response.status}")
                result = await response.json()
                assert "status" in result
                assert result["status"] == "success"
                assert "message" in result
                url = result["message"]
            async with session.get(url) as response:
                img = await response.content.read()
                await data.reply_image(image=io.BytesIO(img))
