import matplotlib
matplotlib.use('Agg')  # neinteraktivní backend

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import os
import sys
from matplotlib.ticker import MaxNLocator, FormatStrFormatter

# --- Parametr z CLI ---
# Použití: python3 PlotIt.py <shot_no>
shot_no = sys.argv[1] if len(sys.argv) > 1 else "?"

# Parametry
channels = [f'ch{i}.csv' for i in range(1, 13)]
fig, axs = plt.subplots(6, 2, figsize=(12, 10), sharex=True)
fig.suptitle(f"GOLEM Shot {shot_no}")
axs = np.array(axs)  # jistota indexování

# Rozdělení na levou/pravou sadu os
axs_left  = [axs[i][0] for i in range(6)]
axs_right = [axs[i][1] for i in range(6)]
group_left  = channels[:6]   # ch1–ch6  -> T1–T6
group_right = channels[6:]   # ch7–ch12 -> T7–T12

# VŠEM osám dej popisek i stupnici napravo (jako dřív pravý sloupec)
for ax in axs_left + axs_right:
    ax.yaxis.set_label_position("right")
    ax.yaxis.tick_right()

# Funkce pro vykreslení skupiny
def plot_group(axs, group, ref_file, scale_std, label_start_index):
    # Načtení referenčního signálu (pro nastavení rozsahu)
    ref_data = pd.read_csv(ref_file, header=None)
    y_ref = ref_data[1]
    mean = y_ref.mean()
    std = y_ref.std()
    ymin = mean - scale_std * std
    ymax = mean + scale_std * std
    if ymin == ymax:
        ymax = ymin + 1e-3  # proti degeneraci

    # Vykreslení jednotlivých kanálů
    for ax, fname, k in zip(axs, group, range(label_start_index, label_start_index + 6)):
        if not os.path.exists(fname):
            continue
        data = pd.read_csv(fname, header=None)
        t, y = data[0].to_numpy(), data[1].to_numpy()

        ax.plot(t * 1000, y, linestyle='-', linewidth=0.8)
        ax.set_ylabel(f"T{k} [V]")  # jednotky + nové značení

        # Rozumné limity a stupnice
        ax.set_ylim(ymin, ymax)
        ax.yaxis.set_major_locator(MaxNLocator(nbins=3, prune=None))
        ax.yaxis.set_major_formatter(FormatStrFormatter('%.2f'))
        ax.grid(True, linestyle=':', linewidth=0.5)

# Vykreslení obou skupin (levá T1–T6, pravá T7–T12)
plot_group(axs_left,  group_left,  'ch1.csv', 3.0, label_start_index=1)
plot_group(axs_right, group_right, 'ch7.csv', 3.0, label_start_index=7)

# Osa X
for ax in axs_left[-1:] + axs_right[-1:]:
    ax.set_xlabel("Time [ms]")
    ax.set_xticks([10, 20, 30, 40])

plt.tight_layout(rect=[0, 0, 1, 0.97])
plt.savefig("ScreenShotAll.png", dpi=150)
# plt.show()
