"""Tests for provider clients in mock mode."""
import pytest
import asyncio
from src.providers.base import TranscriptionRequest, RequestStatus
from src.providers.aistudio import AIStudioProvider
from src.providers.openrouter import OpenRouterProvider


def _make_request(seg_id: str = "seg_001", lang: str = "te") -> TranscriptionRequest:
    return TranscriptionRequest(
        segment_id=seg_id,
        audio_base64="AAAA",  # dummy
        language_code=lang,
        original_file=f"{seg_id}.flac",
    )


class TestAIStudioMock:
    def test_mock_single_request(self):
        provider = AIStudioProvider(api_key="fake", mock_mode=True)
        req = _make_request()
        responses = asyncio.get_event_loop().run_until_complete(
            provider.send_batch([req])
        )
        assert len(responses) == 1
        assert responses[0].status == RequestStatus.SUCCESS
        assert responses[0].transcription_data is not None
        assert "transcription" in responses[0].transcription_data
        assert "speaker" in responses[0].transcription_data

    def test_mock_batch(self):
        provider = AIStudioProvider(api_key="fake", mock_mode=True)
        reqs = [_make_request(f"seg_{i:03d}") for i in range(10)]
        responses = asyncio.get_event_loop().run_until_complete(
            provider.send_batch(reqs)
        )
        assert len(responses) == 10
        assert all(r.status == RequestStatus.SUCCESS for r in responses)

    def test_mock_token_usage(self):
        provider = AIStudioProvider(api_key="fake", mock_mode=True)
        req = _make_request()
        responses = asyncio.get_event_loop().run_until_complete(
            provider.send_batch([req])
        )
        usage = responses[0].token_usage
        assert usage.input_tokens > 0
        assert usage.output_tokens > 0
        assert usage.cache_hit is True

    def test_provider_name(self):
        provider = AIStudioProvider(api_key="fake", mock_mode=True)
        assert provider.get_provider_name() == "aistudio"


class TestOpenRouterMock:
    def test_mock_single_request(self):
        provider = OpenRouterProvider(api_key="fake", mock_mode=True)
        req = _make_request()
        responses = asyncio.get_event_loop().run_until_complete(
            provider.send_batch([req])
        )
        assert len(responses) == 1
        assert responses[0].status == RequestStatus.SUCCESS
        assert "transcription" in responses[0].transcription_data

    def test_mock_batch(self):
        provider = OpenRouterProvider(api_key="fake", mock_mode=True)
        reqs = [_make_request(f"seg_{i:03d}") for i in range(5)]
        responses = asyncio.get_event_loop().run_until_complete(
            provider.send_batch(reqs)
        )
        assert len(responses) == 5

    def test_provider_name(self):
        provider = OpenRouterProvider(api_key="fake", mock_mode=True)
        assert provider.get_provider_name() == "openrouter"
