import numpy as np

from backend.app.models.activity import DataPoint

# Standard durations for the power duration curve
DURATIONS = [1, 5, 10, 15, 30, 60, 120, 300, 600, 1200, 1800, 3600]


def calculate_power_curve(data_points: list[DataPoint]) -> dict[int, int]:
    """
    Calculate max average power for standard durations.
    Returns {duration_seconds: max_avg_power}.
    """
    powers = np.array([dp.power for dp in data_points if dp.power is not None], dtype=float)
    if len(powers) == 0:
        return {}

    result = {}
    for dur in DURATIONS:
        if dur > len(powers):
            break
        if dur == 1:
            result[dur] = int(np.max(powers))
        else:
            # Rolling mean via cumsum for efficiency
            cumsum = np.cumsum(np.insert(powers, 0, 0))
            rolling_avg = (cumsum[dur:] - cumsum[:-dur]) / dur
            result[dur] = int(np.max(rolling_avg))

    return result
