"""
=========================================
CV6 AI Trading OS
SuperTrend Indicator
=========================================
"""

import pandas as pd

from app.indicators.atr import ATRIndicator


class SuperTrendIndicator:

    @staticmethod
    def calculate(
        data: pd.DataFrame,
        period: int = 10,
        multiplier: float = 3.0
    ):

        df = data.copy()

        atr = ATRIndicator.calculate(
            df,
            period
        )

        hl2 = (df["High"] + df["Low"]) / 2

        df["SuperTrend_Upper"] = hl2 + (multiplier * atr)
        df["SuperTrend_Lower"] = hl2 - (multiplier * atr)

        return df

    @staticmethod
    def latest(
        data: pd.DataFrame,
        period: int = 10,
        multiplier: float = 3.0
    ):

        result = SuperTrendIndicator.calculate(
            data,
            period,
            multiplier
        )

        return {
            "upper": round(result["SuperTrend_Upper"].iloc[-1], 2),
            "lower": round(result["SuperTrend_Lower"].iloc[-1], 2)
        }