import numpy as np

def plot_time_domain(axis, time_axis_ns, data, channels) -> None:
    """
    Построение временной зависимости.
    
    axis        : matplotlib.axes.Axes
    time_axis_ns: numpy.ndarray (в наносекундах)
    data        : 2D-массив [N, num_channels]
    channels    : список названий каналов, например ["Channel A", "Channel B"]
    """
    axis.clear()
    for idx, label in enumerate(channels):
        y = data[:, idx]
        axis.plot(time_axis_ns, y, label=label)

    axis.set_xlabel("Time (ns)")
    axis.set_ylabel("Amplitude (V)")
    axis.legend(loc="best")
    axis.grid(True)
    axis.figure.canvas.draw()

def plot_spectrum(axis, frequency, data, channels, middle_frequency) -> None:
    """
    Построение спектра.
    frequency (MHz), data.shape = (N, num_channels)
    channels — список названий каналов (["Channel A", "Channel B", ...])
    middle_frequency (MHz) — центральная частота для отметки
    """
    axis.clear()
    for idx, label in enumerate(channels):
        y = data[:, idx]
        Y = np.fft.fft(y)
        spectrum = np.abs(Y)
        axis.plot(frequency, spectrum, label=label)

    if middle_frequency != 0.0:
        axis.axvline(x=middle_frequency, color='red', linestyle='--', label="Center Freq")

    axis.set_xlabel("Frequency (MHz)")
    axis.set_ylabel("Magnitude (r.u.)")
    axis.legend(loc="best")
    axis.grid(True)
    axis.figure.canvas.draw()

def plot_demodulated_time_domain(ax, time_ns, demod_data, selected_channels) -> None:
    """
    Отрисовка демодулированного сигнала (I-компонент).
    
    ax                : matplotlib.axes.Axes
    time_ns           : вектор времени (нс) после децимации
    demod_data        : комплексный массив [N, num_channels], где каждая колонка — выбранный канал
    selected_channels : список названий каналов, например ["Channel A", "Channel C", ...]
    """
    ax.clear()
    for idx, ch_label in enumerate(selected_channels):
        y_i = np.real(demod_data[:, idx])
        ax.plot(time_ns, y_i, label=f"{ch_label} (I)")

    ax.set_xlabel("Time after decimation (ns)")
    ax.set_ylabel("Amplitude (V)")
    ax.legend(loc="best")
    ax.grid(True)
    ax.figure.canvas.draw()
