import streamlit as st
import pandas as pd
import os
import time  # RISOLVE: NameError: name 'time' is not defined
from pathlib import Path
from normalize import norm_mac

def show_beacon_manager(cfg):
    st.subheader("🏷️ Gestione Beacon e Gruppi")
    
    paths = cfg.get("paths", {})
    beacon_csv = paths.get("beacons_csv", "/data/config/beacons.csv")
    group_csv = "/data/config/beacongroup.csv"
    csv_delim = paths.get("csv_delimiter", ";")

    # Inizializzazione session_state per il reset dei campi dopo il salva
    if "reset_trigger" not in st.session_state:
        st.session_state.reset_trigger = False

    def load_df(path, cols):
        if os.path.exists(path):
            try:
                df = pd.read_csv(path, sep=csv_delim)
                df.columns = [c.strip() for c in df.columns]
                return df
            except:
                return pd.DataFrame(columns=cols)
        return pd.DataFrame(columns=cols)

    df_beacons = load_df(beacon_csv, ["BeaconName", "MAC"])
    df_groups = load_df(group_csv, ["BeaconGroupName", "GroupMAC"])

    sub_tab1, sub_tab2 = st.tabs(["Individuali", "Gruppi"])

    with sub_tab1:
        st.markdown("### 📋 Anagrafica Beacon Singoli")
        edited_beacons = st.data_editor(
            df_beacons, num_rows="dynamic", use_container_width=True, 
            key="editor_beacons", hide_index=True
        )
        if st.button("💾 Salva Beacon Individuali"):
            try:
                edited_beacons['MAC'] = edited_beacons['MAC'].apply(norm_mac)
                edited_beacons.to_csv(beacon_csv, index=False, sep=csv_delim)
                st.success("Anagrafica salvata!")
                st.rerun()
            except Exception as e:
                st.error(f"Errore: {e}")

    with sub_tab2:
        st.markdown("### 🏗️ Creazione e Gestione Gruppi")
        
        if not df_groups.empty:
            st.write("#### Gruppi Attivi (Vista Operatore)")
            mac_to_name = dict(zip(df_beacons['MAC'], df_beacons['BeaconName']))
            
            display_data = []
            for _, row in df_groups.iterrows():
                group_name = row['BeaconGroupName']
                macs = str(row['GroupMAC']).split(',')
                for m in macs:
                    m = m.strip()
                    display_data.append({
                        "Gruppo": group_name, 
                        "BeaconName": mac_to_name.get(m, "Sconosciuto"),
                        "MAC": m
                    })
            
            # --- LOGICA PER UNIRE LE CELLE (Excel Style) ---
            # Trasformiamo Gruppo e BeaconName in Indici per raggrupparli visivamente
            df_display = pd.DataFrame(display_data)
            df_grouped = df_display.set_index(["Gruppo", "BeaconName"])
            st.dataframe(df_grouped, use_container_width=True)

            # RIMOZIONE SELETTIVA GRUPPO
            st.divider()
            col_del1, col_del2 = st.columns([3, 1])
            group_to_del = col_del1.selectbox("Seleziona gruppo da rimuovere:", df_groups["BeaconGroupName"].unique())
            if col_del2.button("🗑️ Rimuovi Gruppo", use_container_width=True):
                df_groups = df_groups[df_groups["BeaconGroupName"] != group_to_del]
                df_groups.to_csv(group_csv, index=False, sep=csv_delim)
                st.warning(f"Gruppo '{group_to_del}' rimosso.")
                st.rerun()
        else:
            st.info("Nessun gruppo configurato.")
        
        st.divider()
        st.write("#### Aggiungi o Modifica un Gruppo")
        
        # Form per l'inserimento con reset automatico
        with st.form("form_nuovo_gruppo", clear_on_submit=True):
            gn = st.text_input("Nome Gruppo (es. GBC-01)")
            
            options = [f"{n} ({m})" for n, m in zip(df_beacons["BeaconName"], df_beacons["MAC"])]
            selected_options = st.multiselect("Seleziona i Beacon:", options)
            
            submit = st.form_submit_button("💾 Salva Gruppo", type="primary")
            
            if submit:
                if gn and selected_options:
                    selected_macs = [opt.split("(")[-1].replace(")", "") for opt in selected_options]
                    mac_list_str = ",".join(selected_macs)
                    
                    if gn in df_groups["BeaconGroupName"].values:
                        df_groups.loc[df_groups["BeaconGroupName"] == gn, "GroupMAC"] = mac_list_str
                    else:
                        new_row = pd.DataFrame([{"BeaconGroupName": gn, "GroupMAC": mac_list_str}])
                        df_groups = pd.concat([df_groups, new_row], ignore_index=True)
                    
                    os.makedirs(os.path.dirname(group_csv), exist_ok=True)
                    df_groups.to_csv(group_csv, index=False, sep=csv_delim)
                    
                    st.success(f"Gruppo '{gn}' salvato!")
                    time.sleep(1) 
                    st.rerun()
                else:
                    st.error("Dati incompleti: inserire Nome e selezionare i Beacon.")

    return df_beacons, df_groups
