import requests

from .exceptions import APIError


class API:

    def __init__(self, server='127.0.0.1:8000'):
        self.server = server

    def __getattr__(self, name):
        api_url = 'http://%s/api/%s/?json=true' % (self.server, name)

        def call(*args, **kwargs):
            api_args = requests.get(api_url).json()['args']
            params = { _['name']: _['default'] for _ in api_args}
            
            for i in range(len(args)):
                params[api_args[i]['name']] = args[i]

            params.update(kwargs)

            res = requests.post(api_url, json=params)
            result = res.json()

            if 200 <= res.status_code < 400:
                return result['result']

            if 400 <= res.status_code < 500:
                raise APIError(res.status_code, result['msg'], result['code'])

            raise result

        return call

