from __future__ import annotations

import pandas as pd


def calculate_rsi(close: pd.Series, period: int = 14) -> pd.Series:
    """
    يحسب مؤشر RSI باستخدام طريقة Wilder's Smoothed Moving Average.

    الخوارزمية:
      delta     = close.diff()
      gains     = delta.clip(lower=0)
      losses    = (-delta).clip(lower=0)
      avg_gain  = gains.ewm(alpha=1/period, adjust=False).mean()
      avg_loss  = losses.ewm(alpha=1/period, adjust=False).mean()
      rs        = avg_gain / avg_loss
      rsi       = 100 - (100 / (1 + rs))

    ملاحظة:
    - ewm(alpha=1/period, adjust=False) يكافئ Wilder's smoothing المستخدم في معظم المنصات
    - القيم الأولى (قبل period+1 شمعة) ستكون NaN بسبب .diff()
    - يُعيد Series بنفس طول close
    """
    delta = close.diff()
    gains  = delta.clip(lower=0)
    losses = (-delta).clip(lower=0)

    alpha = 1.0 / period
    avg_gain = gains.ewm(alpha=alpha, adjust=False).mean()
    avg_loss = losses.ewm(alpha=alpha, adjust=False).mean()

    rs = avg_gain / avg_loss.replace(0, float("nan"))
    rsi = 100.0 - (100.0 / (1.0 + rs))

    return rsi
