"""Estimación de costo por llamada según tokens / audio / caracteres TTS."""

from __future__ import annotations

from dataclasses import dataclass

from call_metrics.session import CallSession


@dataclass(frozen=True)
class CostRates:
    """Precios unitarios (sobreescribibles vía .env)."""

    # USD por 1M tokens
    llm_input_per_1m: float = 0.40
    llm_output_per_1m: float = 1.60
    # USD por minuto de audio STT
    stt_per_minute: float = 0.024
    # USD por 1000 caracteres TTS
    tts_per_1k_chars: float = 0.016

    def estimate(self, session: CallSession) -> float:
        llm = (
            (session.total_prompt_tokens / 1_000_000.0) * self.llm_input_per_1m
            + (session.total_completion_tokens / 1_000_000.0) * self.llm_output_per_1m
        )
        stt = (session.stt_audio_seconds / 60.0) * self.stt_per_minute
        tts = (session.tts_characters / 1000.0) * self.tts_per_1k_chars
        return llm + stt + tts
