import logging

import discord
from aiohttp import web
from discord.ext import commands

from bot import TuxBot

log = logging.getLogger(__name__)


class API(commands.Cog):

    def __init__(self, bot: TuxBot):
        self.bot = bot
        self.site = web.TCPSite

        app = web.Application()
        app.add_routes([web.get('/users/{user_id}', self.users)])

        self.runner = web.AppRunner(app)
        self.bot.loop.create_task(self.start_HTTPMonitoring_server())

    async def start_HTTPMonitoring_server(self):
        host = self.bot.config.get('API', 'Host')
        port = self.bot.config.get('API', 'Port')

        print(f"Starting API server on {host}:{port}")

        await self.runner.setup()
        self.site = web.TCPSite(self.runner, host, port)
        await self.site.start()

    async def users(self, request):
        try:
            user = await self.bot.fetch_user(request.match_info['user_id'])
        except discord.NotFound:
            return web.Response(status=404)

        json = {
            'id': user.id,
            'username': user.name,
            'discriminator': user.discriminator,
            'avatar': user.avatar,
            'default_avatar': user.default_avatar.value,
            'bot': user.bot,
            'system': user.system,
        }

        return web.json_response(
            json
        )


def setup(bot: TuxBot):
    bot.add_cog(API(bot))