import httpx
from pycparser.ply.yacc import token


class ChatBase:

    @staticmethod
    async def http_stream(url, data, headers, timeout=300):
        async with httpx.AsyncClient(timeout=timeout) as client:

            async with client.stream("POST", url, json=data, headers=headers) as response:
                if response.status_code == 200:
                    try:
                        async for answer in response.aiter_text():
                            yield answer
                    except GeneratorExit as e:
                        print(e)
                        return
                else:
                    yield f"Error: {response.status_code}"

    @staticmethod
    async def http_post(url, data, headers, timeout=300):
        async with httpx.AsyncClient(timeout=timeout) as client:
            response = await client.post(url, json=data, headers=headers)
            return response

    @staticmethod
    async def http_get(url, params, headers, timeout=300):
        async with httpx.AsyncClient(timeout=timeout) as client:
            response = await client.get(url, params=params, headers=headers)
            return response

    @staticmethod
    async def http_put(url, data, headers, timeout=300):
        async with httpx.AsyncClient(timeout=timeout) as client:
            response = await client.put(url, json=data, headers=headers)
            return response

    @staticmethod
    async def http_upload_file(url, data, files, headers, timeout=300):
        async with httpx.AsyncClient(timeout=timeout) as client:
            response = await client.post(url, headers=headers, files=files, data=data)
            return response


    @staticmethod
    async def get_headers(token):
        return {
            'Content-Type': 'application/json',
            'Authorization': f'Bearer {token}'
        }


