# This file was auto-generated by Fern from our API Definition.

import typing
import urllib.parse
from json.decoder import JSONDecodeError

from ...core.api_error import ApiError
from ...core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
from ...core.jsonable_encoder import jsonable_encoder
from ...errors.unprocessable_entity_error import UnprocessableEntityError
from ...types.audio_native_create_project_response_model import AudioNativeCreateProjectResponseModel
from ...types.http_validation_error import HttpValidationError

try:
    import pydantic.v1 as pydantic  # type: ignore
except ImportError:
    import pydantic  # type: ignore

# this is used as the default value for optional parameters
OMIT = typing.cast(typing.Any, ...)


class AudioNativeClient:
    def __init__(self, *, client_wrapper: SyncClientWrapper):
        self._client_wrapper = client_wrapper

    def create(
        self,
        *,
        name: str,
        image: str,
        author: str,
        small: bool,
        text_color: str,
        background_color: str,
        sessionization: int,
        voice_id: str,
        model_id: str,
        file: typing.IO,
        auto_convert: bool,
    ) -> AudioNativeCreateProjectResponseModel:
        """
        Creates AudioNative enabled project, optionally starts conversion and returns project id and embeddable html snippet.

        Parameters:
            - name: str.

            - image: str.

            - author: str.

            - small: bool.

            - text_color: str.

            - background_color: str.

            - sessionization: int.

            - voice_id: str.

            - model_id: str.

            - file: typing.IO.

            - auto_convert: bool.
        """
        _response = self._client_wrapper.httpx_client.request(
            "POST",
            urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "v1/audio-native"),
            data=jsonable_encoder(
                {
                    "name": name,
                    "image": image,
                    "author": author,
                    "small": small,
                    "text_color": text_color,
                    "background_color": background_color,
                    "sessionization": sessionization,
                    "voice_id": voice_id,
                    "model_id": model_id,
                    "auto_convert": auto_convert,
                }
            ),
            files={"file": file},
            headers=self._client_wrapper.get_headers(),
            timeout=60,
        )
        if 200 <= _response.status_code < 300:
            return pydantic.parse_obj_as(AudioNativeCreateProjectResponseModel, _response.json())  # type: ignore
        if _response.status_code == 422:
            raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json()))  # type: ignore
        try:
            _response_json = _response.json()
        except JSONDecodeError:
            raise ApiError(status_code=_response.status_code, body=_response.text)
        raise ApiError(status_code=_response.status_code, body=_response_json)


class AsyncAudioNativeClient:
    def __init__(self, *, client_wrapper: AsyncClientWrapper):
        self._client_wrapper = client_wrapper

    async def create(
        self,
        *,
        name: str,
        image: str,
        author: str,
        small: bool,
        text_color: str,
        background_color: str,
        sessionization: int,
        voice_id: str,
        model_id: str,
        file: typing.IO,
        auto_convert: bool,
    ) -> AudioNativeCreateProjectResponseModel:
        """
        Creates AudioNative enabled project, optionally starts conversion and returns project id and embeddable html snippet.

        Parameters:
            - name: str.

            - image: str.

            - author: str.

            - small: bool.

            - text_color: str.

            - background_color: str.

            - sessionization: int.

            - voice_id: str.

            - model_id: str.

            - file: typing.IO.

            - auto_convert: bool.
        """
        _response = await self._client_wrapper.httpx_client.request(
            "POST",
            urllib.parse.urljoin(f"{self._client_wrapper.get_base_url()}/", "v1/audio-native"),
            data=jsonable_encoder(
                {
                    "name": name,
                    "image": image,
                    "author": author,
                    "small": small,
                    "text_color": text_color,
                    "background_color": background_color,
                    "sessionization": sessionization,
                    "voice_id": voice_id,
                    "model_id": model_id,
                    "auto_convert": auto_convert,
                }
            ),
            files={"file": file},
            headers=self._client_wrapper.get_headers(),
            timeout=60,
        )
        if 200 <= _response.status_code < 300:
            return pydantic.parse_obj_as(AudioNativeCreateProjectResponseModel, _response.json())  # type: ignore
        if _response.status_code == 422:
            raise UnprocessableEntityError(pydantic.parse_obj_as(HttpValidationError, _response.json()))  # type: ignore
        try:
            _response_json = _response.json()
        except JSONDecodeError:
            raise ApiError(status_code=_response.status_code, body=_response.text)
        raise ApiError(status_code=_response.status_code, body=_response_json)
