import streamlit as st
import pandas as pd
import os

def load_beacons(file_path, delimiter):
    """Carica i beacon dal file CSV utilizzando il delimitatore configurato."""
    if not os.path.exists(file_path):
        return pd.DataFrame(columns=["BeaconName", "MAC"])
    try:
        return pd.read_csv(file_path, sep=delimiter)
    except Exception:
        return pd.DataFrame(columns=["BeaconName", "MAC"])

def save_beacons(file_path, df, delimiter):
    """Salva i beacon su CSV con il separatore corretto e crea le cartelle se necessario."""
    folder = os.path.dirname(file_path)
    if folder and not os.path.exists(folder):
        os.makedirs(folder, exist_ok=True)
    df.to_csv(file_path, index=False, sep=delimiter)

def show_beacon_manager(config):
    st.subheader("🏷️ Gestione Anagrafica Beacon")
    
    # Recupero parametri dalla gerarchia paths del config.yaml
    paths_cfg = config.get("paths", {})
    beacons_file = paths_cfg.get("beacons_csv", "/data/config/beacons.csv")
    delimiter = paths_cfg.get("csv_delimiter", ";")
    
    # Caricamento dati
    df = load_beacons(beacons_file, delimiter)

    # --- SEZIONE AGGIUNTA ---
    with st.expander("➕ Aggiungi Nuovo Beacon", expanded=len(df) == 0):
        col1, col2 = st.columns(2)
        with col1:
            name = st.text_input("Nome Beacon (es. BC-21)")
        with col2:
            mac = st.text_input("Indirizzo MAC (es. C3:00:00:57:B9:E6)")
        
        if st.button("REGISTRA BEACON"):
            if name and mac:
                mac = mac.strip().upper()
                if mac in df['MAC'].values:
                    st.error("Errore: Questo MAC è già presente in lista.")
                else:
                    new_line = pd.DataFrame([{"BeaconName": name, "MAC": mac}])
                    df = pd.concat([df, new_line], ignore_index=True)
                    save_beacons(beacons_file, df, delimiter)
                    st.success(f"Beacon {name} registrato correttamente!")
                    st.rerun()
            else:
                st.warning("Inserisci sia il Nome che il MAC address.")

    # --- SEZIONE VISUALIZZAZIONE E MODIFICA ---
    if not df.empty:
        st.markdown("---")
        st.write("### Lista Beacon")
        st.info("💡 Puoi modificare i nomi o i MAC direttamente cliccando nelle celle della tabella e poi cliccare su SALVA.")
        
        # Editor interattivo per modifiche "al volo"
        edited_df = st.data_editor(
            df, 
            use_container_width=True, 
            hide_index=True,
            column_config={
                "BeaconName": st.column_config.TextColumn("Nome Beacon", help="Nome identificativo", required=True),
                "MAC": st.column_config.TextColumn("Indirizzo MAC", help="Formato AA:BB:CC...", required=True)
            }
        )
        
        # Controllo se ci sono state modifiche
        if not edited_df.equals(df):
            if st.button("💾 SALVA MODIFICHE TABELLA"):
                save_beacons(beacons_file, edited_df, delimiter)
                st.success("Anagrafica aggiornata!")
                st.rerun()

        # --- SEZIONE ELIMINAZIONE ---
        st.markdown("---")
        st.subheader("Elimina Beacon")
        to_del = st.selectbox("Seleziona il beacon da rimuovere:", df['BeaconName'].tolist())
        if st.button("🗑️ ELIMINA SELEZIONATO"):
            df = df[df['BeaconName'] != to_del]
            save_beacons(beacons_file, df, delimiter)
            st.success(f"Beacon {to_del} rimosso.")
            st.rerun()
    else:
        st.info("Nessun beacon configurato. Inserisci il primo beacon per creare il file.")
