import numpy as np

def genere_signal_photodiode(nu_0=2600, nu_e=26000, D=5, P_cible=1):
    """
    Génère un signal cosinus de fréquence nu_0, échantillonné à la fréquence nu_e
    sur une durée D, et ajuste son amplitude afin d’imposer une puissance moyenne
    cible P_cible.

    Parameters
    ----------
    nu_0 : float, optional
        Fréquence du signal (Hz).
    nu_e : float, optional
        Fréquence d'échantillonnage (Hz).
    D : float, optional
        Durée totale du signal (s).
    P_cible : float, optional
        Puissance moyenne souhaitée du signal.

    Returns
    -------
    t : ndarray
        Axe temporel.
    signal : ndarray
        Signal cosinus échantillonné avec amplitude ajustée.
    A : float
        Amplitude ajustée pour respecter la puissance cible.
    """
    plages_actives = [(0, 0.15*D), (0.4*D, 0.55*D), (0.7*D, 0.95*D)]
    # Vérification de Shannon
    if nu_e < 2 * nu_0:
        raise ValueError("Théorème de Shannon non respecté")

    # Axe temporel
    t = np.arange(0, D, 1 / nu_e)

    # Sinusoïde unité
    sin_ref = np.cos(2 * np.pi * nu_0 * t)

    # Masque temporel
    masque = np.zeros_like(t, dtype=bool)
    for t1, t2 in plages_actives:
        masque |= (t >= t1) & (t <= t2)

    sin_ref = sin_ref * masque

    # Puissance de référence (amplitude = 1)
    P_ref = np.mean(sin_ref**2)

    if P_ref == 0:
        raise ValueError("Puissance de référence nulle : plages actives invalides")

    # Amplitude imposée
    A = np.sqrt(P_cible / P_ref)

    # Signal final
    signal = A * sin_ref

    # Puissance obtenue
    P = np.mean(signal**2)

    return t, signal, A#, P
