"""
=========================================
CV6 AI Trading OS
AI Models
=========================================
"""

from enum import Enum
from typing import Optional

from pydantic import BaseModel, Field


class AIProvider(str, Enum):
    """
    Supported AI Providers
    """

    RULE_ENGINE = "rule_engine"

    GPT = "gpt"

    CLAUDE = "claude"

    GEMINI = "gemini"

    DEEPSEEK = "deepseek"

    OLLAMA = "ollama"

    LLAMA = "llama"


class DecisionType(str, Enum):
    """
    Trading Decisions
    """

    BUY = "BUY"
    SELL = "SELL"
    HOLD = "HOLD"


class AIRequest(BaseModel):
    """
    Input Request for AI Engine
    """

    provider: AIProvider = AIProvider.GPT

    symbol: str = Field(..., example="NIFTY")

    timeframe: str = Field(..., example="5m")

    indicators: dict = Field(
        ...,
        example={
            "ema": "BUY",
            "rsi": "BUY",
            "macd": "BUY",
            "supertrend": "BUY",
            "vwap": "BUY"
        }
    )


class AIResponse(BaseModel):
    """
    Standard AI Response
    """

    provider: AIProvider

    decision: DecisionType

    confidence: float = Field(
        ...,
        ge=0,
        le=100
    )

    reason: str

    score: Optional[float] = None