"""
=========================================
CV6 AI Trading OS
AI Manager
=========================================
"""

from app.ai.ai_models import AIProvider

from app.ai.providers.gpt_provider import GPTProvider
from app.ai.providers.claude_provider import ClaudeProvider
from app.ai.providers.gemini_provider import GeminiProvider
from app.ai.providers.deepseek_provider import DeepSeekProvider
from app.ai.providers.ollama_provider import OllamaProvider
from app.ai.providers.llama_provider import LlamaProvider


class AIManager:
    """
    Manages all AI Providers.
    """

    def __init__(self):

        self.providers = {
            AIProvider.GPT: GPTProvider(),
            AIProvider.CLAUDE: ClaudeProvider(),
            AIProvider.GEMINI: GeminiProvider(),
            AIProvider.DEEPSEEK: DeepSeekProvider(),
            AIProvider.OLLAMA: OllamaProvider(),
            AIProvider.LLAMA: LlamaProvider(),
        }

        self.default_provider = AIProvider.GPT

    def get_provider(self, provider: AIProvider = None):
        """
        Return provider instance.
        """

        if provider is None:
            provider = self.default_provider

        return self.providers.get(provider)

    def set_default_provider(self, provider: AIProvider):
        """
        Change default AI Provider.
        """

        if provider in self.providers:
            self.default_provider = provider

    def get_default_provider(self):
        """
        Return current default provider.
        """

        return self.default_provider

    def list_providers(self):
        """
        Return available providers.
        """

        return list(self.providers.keys())

    def is_provider_available(self, provider: AIProvider):
        """
        Check provider availability.
        """

        instance = self.providers.get(provider)

        if instance is None:
            return False

        return instance.is_available()