import json

import requests

from ..typing import Any, CreateResult
from .base_provider import BaseProvider


class Forefront(BaseProvider):
    url = "https://forefront.com"
    supports_stream = True
    supports_gpt_35_turbo = True

    @staticmethod
    def create_completion(
        model: str,
        messages: list[dict[str, str]],
        stream: bool,
        **kwargs: Any,
    ) -> CreateResult:
        json_data = {
            "text": messages[-1]["content"],
            "action": "noauth",
            "id": "",
            "parentId": "",
            "workspaceId": "",
            "messagePersona": "607e41fe-95be-497e-8e97-010a59b2e2c0",
            "model": "gpt-4",
            "messages": messages[:-1] if len(messages) > 1 else [],
            "internetMode": "auto",
        }

        response = requests.post(
            "https://streaming.tenant-forefront-default.knative.chi.coreweave.com/free-chat",
            json=json_data,
            stream=True,
        )
        response.raise_for_status()
        for token in response.iter_lines():
            if b"delta" in token:
                yield json.loads(token.decode().split("data: ")[1])["delta"]
