from __future__ import annotations
import logging
from abc import ABC, abstractmethod
from dataclasses import dataclass, field
from typing import Any, Dict, List

logger = logging.getLogger(__name__)

@dataclass
class STTResult:
    transcript: str
    speaker_segments: List[Dict[str, Any]] = field(default_factory=list)
    duration: float = 0.0
    provider: str = ""

    def to_dict(self) -> Dict[str, Any]:
        return {
            "transcript": self.transcript,
            "speaker_segments": self.speaker_segments,
            "duration": self.duration,
            "provider": self.provider,
        }

class BaseSTT(ABC):
    @property
    @abstractmethod
    def provider_name(self) -> str: ...

    @abstractmethod
    def transcribe(self, audio_url: str, callid: str) -> STTResult: ...
