"""
=========================================
CV6 AI Trading OS
Signal Engine
=========================================
"""

from app.signal.signal_validator import SignalValidator


class SignalEngine:

    @staticmethod
    def generate_signal(indicators: dict):

        validation = SignalValidator.validate_indicators(
            indicators
        )

        if not validation["valid"]:
            return validation

        ema = indicators["ema"]
        rsi = indicators["rsi"]
        macd = indicators["macd"]

        buy_score = 0
        sell_score = 0

        # EMA Trend
        if ema > 0:
            buy_score += 1
        else:
            sell_score += 1

        # RSI
        if rsi < 30:
            buy_score += 1
        elif rsi > 70:
            sell_score += 1

        # MACD
        if macd > 0:
            buy_score += 1
        else:
            sell_score += 1

        if buy_score >= 3:
            signal = "STRONG BUY"

        elif buy_score == 2:
            signal = "BUY"

        elif sell_score >= 3:
            signal = "STRONG SELL"

        elif sell_score == 2:
            signal = "SELL"

        else:
            signal = "HOLD"

        return {
            "signal": signal,
            "buy_score": buy_score,
            "sell_score": sell_score,
            "ema": ema,
            "rsi": rsi,
            "macd": macd
        }