from __future__ import annotations

import pandas as pd


def calculate_ema(series: pd.Series, period: int) -> pd.Series:
    """
    EMA باستخدام pandas ewm.
    adjust=False يعطي نفس نتائج معظم منصات التداول.
    البيانات يجب أن تكون مرتبة تصاعدياً (الأقدم أولاً).
    """
    return series.ewm(span=period, adjust=False).mean()


def calculate_macd(
    close: pd.Series,
    fast: int = 12,
    slow: int = 26,
    signal: int = 9,
) -> pd.DataFrame:
    """
    يحسب مؤشر MACD الكامل:
      macd_line   = EMA(close, fast) - EMA(close, slow)
      signal_line = EMA(macd_line, signal)
      histogram   = macd_line - signal_line

    يُعيد DataFrame بالأعمدة: macd, signal, histogram
    نفس عدد الصفوف كـ close.
    """
    ema_fast = calculate_ema(close, fast)
    ema_slow = calculate_ema(close, slow)

    macd_line = ema_fast - ema_slow
    signal_line = calculate_ema(macd_line, signal)
    histogram = macd_line - signal_line

    return pd.DataFrame({
        "macd": macd_line,
        "signal": signal_line,
        "histogram": histogram,
    }, index=close.index)
