"""Mock external services"""
from typing import Dict, List, Optional

class MockConversationService:
    """Mock OpenAI conversation service"""

    def __init__(self):
        self.responses: List[str] = []
        self.call_count = 0
        self.last_request = None
        self.last_character = None
        self.last_prompt = None
        self.last_context = None
        self.custom_responses: Dict[str, str] = {}

    def get_conversation_response(self, character_name: str, prompt: str,
                                  context: Optional[Dict] = None) -> str:
        """Get mock conversation response (matches IConversationService interface)"""
        self.call_count += 1
        self.last_character = character_name
        self.last_prompt = prompt
        self.last_context = context

        # Return custom response if set
        if character_name in self.custom_responses:
            return self.custom_responses[character_name]

        # Return from queue if available
        if self.responses:
            return self.responses.pop(0)

        # Default mock response
        return f"Mock response from {character_name}"

    def set_response(self, response: str):
        """Set next response to return"""
        self.responses.append(response)

    def set_responses(self, responses: List[str]):
        """Set sequence of responses"""
        self.responses = responses.copy()

    def set_custom_response(self, character_name: str, response: str):
        """Set custom response for a specific character"""
        self.custom_responses[character_name] = response

    async def get_response(self, conversation_history: List[Dict],
                          character: Dict,
                          context: Dict) -> str:
        """Legacy async method for backwards compatibility"""
        self.call_count += 1
        self.last_request = {
            'conversation': conversation_history,
            'character': character,
            'context': context
        }

        if not self.responses:
            return "I don't know what to say."

        return self.responses.pop(0)

    def reset(self):
        """Reset mock state"""
        self.responses.clear()
        self.call_count = 0
        self.last_request = None
        self.last_character = None
        self.last_prompt = None
        self.last_context = None
        self.custom_responses.clear()
