"""
=========================================================
CV6 AI Trading OS
AI Accuracy Tracker
=========================================================
"""

from app.ai.ai_models import AIProvider


class AIAccuracyTracker:
    """
    Tracks prediction accuracy
    of each AI provider.
    """

    def __init__(self):

        self.stats = {
            AIProvider.GPT: {
                "correct": 0,
                "total": 0,
            },
            AIProvider.CLAUDE: {
                "correct": 0,
                "total": 0,
            },
            AIProvider.GEMINI: {
                "correct": 0,
                "total": 0,
            },
            AIProvider.DEEPSEEK: {
                "correct": 0,
                "total": 0,
            },
            AIProvider.OLLAMA: {
                "correct": 0,
                "total": 0,
            },
            AIProvider.LLAMA: {
                "correct": 0,
                "total": 0,
            },
        }
    def update(
        self,
        provider: AIProvider,
        correct: bool,
    ):
        """
        Update provider statistics.
        """

        if provider not in self.stats:
            return

        self.stats[provider]["total"] += 1

        if correct:
            self.stats[provider]["correct"] += 1


    def get_accuracy(
        self,
        provider: AIProvider,
    ) -> float:
        """
        Return accuracy percentage.
        """

        if provider not in self.stats:
            return 0.0

        total = self.stats[provider]["total"]

        if total == 0:
            return 0.0

        correct = self.stats[provider]["correct"]

        return round(
            (correct / total) * 100,
            2,
        )


    def get_all_accuracies(self):
        """
        Return accuracy of all providers.
        """

        result = {}

        for provider in self.stats:

            result[provider] = self.get_accuracy(
                provider
            )

        return result