import streamlit as st
import pandas as pd
import os
from pathlib import Path
# CORREZIONE: rimosso il punto per evitare ImportError
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", ";")

    # --- CARICAMENTO DATI ---
    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"])

    # --- UI: TABS INTERNI ---
    sub_tab1, sub_tab2 = st.tabs(["Individuali", "Gruppi"])

    with sub_tab1:
        st.markdown("### 📋 Anagrafica Beacon Singoli")
        # Editor interattivo per i beacon
        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"):
            # Applichiamo la normalizzazione ai MAC inseriti
            try:
                edited_beacons['MAC'] = edited_beacons['MAC'].apply(norm_mac)
                edited_beacons.to_csv(beacon_csv, index=False, sep=csv_delim)
                st.success("Anagrafica Beacon salvata correttamente!")
                st.rerun()
            except Exception as e:
                st.error(f"Errore durante il salvataggio: {e}")

    with sub_tab2:
        st.markdown("### 🏗️ Creazione e Gestione Gruppi")
        
        # Mostra i gruppi esistenti se il file esiste
        if not df_groups.empty:
            st.write("#### Gruppi Attivi")
            st.dataframe(df_groups, use_container_width=True, hide_index=True)
        else:
            st.info("Nessun gruppo configurato.")
        
        st.divider()
        st.write("#### Aggiungi o Modifica un Gruppo")
        
        # Form per la gestione dei gruppi
        with st.form("form_gruppo"):
            gn = st.text_input("Nome Gruppo", help="Esempio: 4dBm_Power, Gruppo_A, ecc.")
            
            # Recuperiamo i beacon disponibili per popolare la selezione
            available_macs = df_beacons["MAC"].tolist()
            available_names = df_beacons["BeaconName"].tolist()
            options = [f"{name} ({mac})" for name, mac in zip(available_names, available_macs)]
            
            selected_options = st.multiselect("Seleziona i Beacon da includere:", options)
            
            submit = st.form_submit_button("💾 Salva Gruppo")
            
            if submit:
                if not gn:
                    st.error("Inserisci un nome per il gruppo.")
                elif not selected_options:
                    st.error("Seleziona almeno un beacon.")
                else:
                    # Estraiamo i MAC eliminando la parte del nome
                    selected_macs = [opt.split("(")[-1].replace(")", "") for opt in selected_options]
                    mac_list_str = ",".join(selected_macs)
                    
                    # Aggiorna se esiste, altrimenti aggiungi
                    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)
                    
                    # Assicuriamoci che la cartella esista
                    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}' creato/aggiornato con successo!")
                    st.rerun()

        if not df_groups.empty:
            if st.button("🗑️ Elimina tutti i Gruppi"):
                if os.path.exists(group_csv):
                    os.remove(group_csv)
                    st.warning("Configurazione gruppi rimossa.")
                    st.rerun()

    return df_beacons, df_groups
