from __future__ import annotations

import importlib
from collections.abc import Callable
from typing import Any


TranscribeCallable = Callable[..., dict[str, Any]]


class FunASRTool:
    _transcribe_callable: TranscribeCallable
    _model: str

    def __init__(
        self,
        transcribe_callable: TranscribeCallable | None = None,
        model: str = "fun-asr-realtime-2025-11-07",
    ) -> None:
        self._transcribe_callable = transcribe_callable or self._dashscope_transcribe
        self._model = model

    def transcribe(self, *, audio_bytes: bytes, filename: str) -> dict[str, Any]:
        payload = self._transcribe_callable(audio_bytes=audio_bytes, filename=filename)
        return {
            "model": self._model,
            **payload,
        }

    def _dashscope_transcribe(
        self, *, audio_bytes: bytes, filename: str
    ) -> dict[str, Any]:
        try:
            importlib.import_module("dashscope")
        except ImportError as exc:
            raise RuntimeError("DashScope SDK is not installed") from exc

        raise RuntimeError(
            "DashScope transcribe runtime integration is not configured yet"
        )
