<!DOCTYPE html>
<html lang="it">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Mappa con Bootstrap Italia e Overlay Edifici</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap-italia@2.13.4/dist/css/bootstrap-italia.min.css" rel="stylesheet">
    <link rel="stylesheet" href="https://unpkg.com/leaflet@1.7.1/dist/leaflet.css" />
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/leaflet.draw/1.0.4/leaflet.draw.css"/>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css" rel="stylesheet">
    <style>
        /* Stile per i label "Tipo Edificio" e "Data di Predisposizione" */
        label[for="buildingType"], label[for="preparationDate"] {
            font-weight: bold; /* Grassetto */
            font-family: inherit; /* Stesso font di "Codice Catastale Particella" */
        }

        /* Stile per i link con sottolineatura solo al passaggio del mouse */
        .link-underline-hover {
                text-decoration: none; /* Rimuove la sottolineatura di base */
            }
        .link-underline-hover:hover {
            text-decoration: underline; /* Aggiunge la sottolineatura solo al passaggio del mouse */
        }

        #buildingType {
            color: hsl(210, 17%, 44%); /* Colore del testo del select */
        }

        #buildingType option {
            color: hsl(210, 17%, 44%); /* Colore del testo delle opzioni */
        }

        #div-select {
            border-bottom: 1px solid hsl(210, 17%, 44%);
            margin-bottom: 5px;
        }

        /* Stile per la riga blu scuro */
        .top-bar {
            background-color: #004080; /* Blu scuro */
            color: white;
            padding: 0.5rem 0;
            text-align: left; /* Allineamento a sinistra */
            font-size: 0.9rem;
        }

        /* Stile per l'header */
        .header {
            background-color: #0066CC; /* Blu chiaro */
            color: white;
            padding: 1rem 0;
        }

        /* Stile per il logo "PW" dentro un cerchio */
        .logo {
            font-family: 'Georgia', serif; /* Font diverso */
            font-size: 1.5rem;
            font-weight: bold;
            display: inline-flex;
            align-items: center;
            justify-content: center;
            width: 50px; /* Diametro del cerchio */
            height: 50px; /* Diametro del cerchio */
            background-color: white; /* Colore di sfondo del cerchio */
            color: #0066CC; /* Colore del testo */
            border-radius: 50%; /* Rende l'elemento un cerchio */
            margin-right: 10px;
        }

        /* Stile per il titolo "Mappa" */
        .header-title {
            color: white;
            font-size: 1.5rem; /* Stessa grandezza di "Segnalazioni e Supporto Tecnico" */
            font-weight: bold;
            display: inline-block;
            vertical-align: middle;
        }

        .main-content {
            background-color: #f8f9fa; /* Grigio chiaro */
            padding: 2rem 0;
        }

        .table-responsive {
            overflow-x: auto;
            /* Aggiungi scroll orizzontale se la tabella è troppo larga */
        }

        .header, .footer {
            background-color: #0066CC; /* Blu istituzionale */
            color: white;
            padding: 1rem 0;
        }

        .main-content {
            background-color: #f8f9fa; /* Grigio chiaro */
            padding: 2rem 0;
        }

        #map {
            height: 500px;
            width: 100%;
        }

        #coordinate-inputs {
            margin-top: 10px;
            width: 50%;
        }
    </style>
</head>
<body>
    <!-- Riga blu scuro con scritto "Project Work" allineata a sinistra -->
    <div class="top-bar">
        <div class="container">
            Project Work
        </div>
    </div>

    <!-- Header -->
    <header class="header">
        <div class="container">
            <div class="row align-items-center">
                <div class="col d-flex">
                    <!-- Logo "PW" dentro un cerchio, ora cliccabile -->
                    <a href="./mappa_logout.html" class="logo-link">
                        <div class="logo">PW</div>
                    </a>
                    <h1 class="header-title">Registrazione degli Edifici</h1>
                </div>
                <div class="col-auto d-flex align-items-center">
                    <a href="./ADMIN.html" class="text-white me-3 link-underline-hover">Gestione Dati Immobiliari</a>
                    <a href="./TFO.html" class="text-white me-3 link-underline-hover">TFO</a>
                    <a href="./buildings.html" class="text-white me-3 link-underline-hover">Registrazione degli Edifici</a>
                    <a href="./mappa_login.html" class="btn btn-light">Logout</a>
                </div>
            </div>
        </div>
    </header>

    <!-- Contenuto principale -->
    <div class="container mt-4">
        <h1 style="font-size: 1.5rem;">Registrazione degli edifici predisposti alla banda ultralarga</h1>
        <p>Compila il modulo sottostante per registrare un edificio predisposto alla banda ultralarga:</p>

        <form id="buildingForm">
            <div class="form-row">
                <div class="form-group col-md-6">
                    <label for="address" style="font-weight: bold; color: black;">Indirizzo</label>
                    <br>
                    <br>
                    <input type="text" class="form-control" id="address" placeholder="Via, n. civico, comune">
                </div>
                <div class="form-group col-md-6">
                    <button type="button" class="btn btn-primary" id="search">Cerca</button>
                </div>
            </div>
            <div class="form-row">
                <div id="map"></div>
            </div>
            <div class="form-row">
                <div class="form-group col-md-3">
                    <label for="latitude" style="font-weight: bold; color: black;">Latitudine</label>
                    <br>
                    <br>
                    <input type="text" class="form-control" id="latitude" placeholder="Latitudine">
                </div>
                <div class="form-group col-md-3">
                    <label for="latitude" style="font-weight: bold; color: black;">Longitudine</label>
                    <br>
                    <br>
                    <input type="text" class="form-control" id="longitude" placeholder="Longitudine">
                </div>
            </div>
            <div class="form-row">
                <div class="form-group col-md-3">
                    <label for="latitude" style="font-weight: bold; color: black;">Codice Comune</label>
                    <br>
                    <br>
                    <input type="text" class="form-control" id="commonCode" placeholder="Codice comune" required>
                </div>
            </div>
            <div class="form-row">
                <div class="form-group col-md-3">
                    <label for="latitude" style="font-weight: bold; color: black;">Codice Catastale Particella</label>
                    <br>
                    <br>
                    <input type="text" class="form-control" id="cadastralCode" placeholder="Codice catastale" required>
                </div>
            </div>
            <label for="buildingType">Tipo Edificio</label>
            <br>
            <br>
            <div class="form-group col-md-3" id="div-select">
                <select class="form-control" id="buildingType">
                    <option>Seleziona tipo di edificio</option>
                    <option>Residenziale</option>
                    <option>Commerciale</option>
                    <option>Industriale</option>
                </select>
            </div>
            <br>
            <label for="preparationDate">Data di Predisposizione</label>
            <br>
            <br>
            <div class="form-group col-md-3">
                <input type="date" class="form-control" id="preparationDate" required>
            </div>
            <button type="button" class="btn btn-primary" id="add">Aggiungi</button>
            <button type="button" class="btn btn-secondary" id="cancellaRiga">Annulla</button>
            
        </form>

        <div class="data-table d-flex flex-column">
            <table class="table mt-4">
                <thead>
                    <tr>
                        <th>Indirizzo</th>
                        <th>Latitudine</th>
                        <th>Longitudine</th>
                        <th>Comune</th>
                        <th>Codice Catastale</th>
                        <th>Tipo Edificio</th>
                        <th>Data Predisposizione</th>
                        <th>Azione</th>
                    </tr>
                </thead>
                <tbody id="buildingTableBody">
                </tbody>
            </table>
        </div>
        <div class="d-flex justify-content-end mt-3">
            <button type="button" class="btn btn-success" id="submitButton">Invia</button>
        </div>
    </div>

    <!-- Script per la mappa e funzionalità -->
    <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
    <script src="https://unpkg.com/leaflet@1.7.1/dist/leaflet.js"></script>
    <script>
        // Inizializzazione Mappa
        const map = L.map('map').setView([41.9028, 12.4964], 13);
        L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(map);

        // Layer edifici colorati
        const edificiLayer = L.layerGroup().addTo(map);
        let currentMarker = null;

        // Funzione principale per caricare gli edifici
        async function caricaEdifici() {
            if (map.getZoom() >= 16) {
                const bounds = map.getBounds();
                const bbox = `${bounds.getSouthWest().lat},${bounds.getSouthWest().lng},${bounds.getNorthEast().lat},${bounds.getNorthEast().lng}`;
                
                const query = `[out:json];
                    (
                        way["building"](${bbox});
                        relation["building"](${bbox});
                    );
                    out geom;
                    out tags;`;

                try {
                    const response = await fetch(`https://overpass-api.de/api/interpreter?data=${encodeURIComponent(query)}`);
                    const data = await response.json();

                    edificiLayer.clearLayers();
                    
                    data.elements.forEach(element => {
                        if (element.type === 'way' && element.geometry) {
                            const latlngs = element.geometry.map(coord => [coord.lat, coord.lon]);
                            var statoEdificio = false;
                            let colorePoligono ;
                            if (statoEdificio) colorePoligono = 'yellow';
                            else colorePoligono = 'green';
                            
                            // const colori = ['#FF0000', '#00FF00'];
                            const polygon = L.polygon(latlngs, {
                                fillColor: colorePoligono,
                                color: colorePoligono,
                                fillOpacity: 0.5
                            }).addTo(edificiLayer);

                            polygon.on('click', async function() {
                                var buildingType = element.tags && element.tags.building ? element.tags.building : 'Sconosciuto';
                                try {
                                    await getAddress(latlngs[0][0], latlngs[0][1]);
                                    var popupContent = `
                                        <b>Coordinate:</b> ${latlngs[0][0]}, ${latlngs[0][1]}<br>
                                        <b>Tipo edificio:</b> ${buildingType}<br>
                                        <b>Indirizzo:</b> ${document.getElementById('addressInput').value}<br>
                                        <b>Stato:</b> ${statoEdificio}<br>
                                        <b>Codice Catastale:</b> nessuno
                                    `;
                                    polygon.bindPopup(popupContent).openPopup();
                                } catch (error) {
                                    console.error("Errore nel recupero dell'indirizzo:", error);
                                    var popupContent = `
                                        <b>Coordinate:</b> ${latlngs[0][0]}, ${latlngs[0][1]}<br>
                                        <b>Tipo edificio:</b> ${buildingType}<br>
                                        <b>Indirizzo:</b> Indirizzo non disponibile<br>
                                        <b>Stato:</b> ${statoEdificio}<br>
                                        <b>Codice Catastale:</b> nessuno
                                    `;
                                    polygon.bindPopup(popupContent).openPopup();
                                }
                            });
                        }
                    });
                } catch (error) {
                    console.error("Errore nel caricamento edifici:", error);
                }
            } else {
                edificiLayer.clearLayers();
            }
        }

        // Carica gli edifici quando la mappa viene spostata o zoomata
        map.on('moveend', caricaEdifici);
        map.on('zoomend', caricaEdifici);

        // Carica gli edifici all'avvio
        caricaEdifici();
// Listener per il click sulla mappa
map.on('click', function(e) {
    const lat = e.latlng.lat; // Latitudine del punto cliccato
    const lng = e.latlng.lng; // Longitudine del punto cliccato

    // Aggiorna i campi del form
    document.getElementById('latitude').value = lat;
    document.getElementById('longitude').value = lng;

    // Ottieni l'indirizzo dalle coordinate
    getAddress(lat, lng);

    // Rimuovi il marker precedente (se esiste)
    if (currentMarker) {
        map.removeLayer(currentMarker);
    }

    // Aggiungi un nuovo marker sulla mappa
    currentMarker = L.marker([lat, lng]).addTo(map)
        .bindPopup(`Coordinate: ${lat}, ${lng}`)
        .openPopup();
});

// Funzione per ottenere l'indirizzo dalle coordinate
async function getAddress(lat, lng) {
    try {
        const response = await fetch(`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`);
        const data = await response.json();

        if (data.address) {
            document.getElementById('address').value = data.display_name;
        } else {
            document.getElementById('address').value = "Indirizzo non trovato";
        }
    } catch (error) {
        console.error("Errore nel geocoding inverso:", error);
        document.getElementById('address').value = "Errore nel geocoding inverso";
    }
}
        // Funzione per ottenere l'indirizzo dalle coordinate
        async function getAddress(lat, lng) {
            try {
                const response = await fetch(`https://nominatim.openstreetmap.org/reverse?format=jsonv2&lat=${lat}&lon=${lng}`);
                const data = await response.json();

                if (data.address) {
                    document.getElementById('address').value = data.display_name;
                } else {
                    document.getElementById('address').value = "Indirizzo non trovato";
                }
            } catch (error) {
                console.error("Errore nel geocoding inverso:", error);
                document.getElementById('address').value = "Errore nel geocoding inverso";
            }
        }

        // Variabile per memorizzare il marker corrente
        var marker;

        // Gestione della ricerca dell'indirizzo
        document.getElementById('search').addEventListener('click', function() {
            var address = document.getElementById('address').value;
            if (address) {
                // Effettua una richiesta all'API di Nominatim per geocodificare l'indirizzo
                fetch(`https://nominatim.openstreetmap.org/search?q=${encodeURIComponent(address)}&format=json`)
                    .then(response => response.json())
                    .then(data => {
                        if (data && data.length > 0) {
                            var lat = parseFloat(data[0].lat); // Latitudine
                            var lon = parseFloat(data[0].lon); // Longitudine

                            // Rimuovi il marker precedente (se esiste)
                            if (marker) {
                                map.removeLayer(marker);
                            }

                            // Aggiungi un nuovo marker sulla mappa
                            marker = L.marker([lat, lon]).addTo(map)
                                .bindPopup(`Indirizzo: ${data[0].display_name}`)
                                .openPopup();

                            // Centra la mappa sulla nuova posizione
                            map.setView([lat, lon], 16);

                            // Riempie i campi di input per latitudine e longitudine
                            document.getElementById('latitude').value = lat;
                            document.getElementById('longitude').value = lon;
                        } else {
                            alert('Indirizzo non trovato.');
                        }
                    })
                    .catch(error => {
                        console.error('Errore durante la geocodifica:', error);
                        alert('Si è verificato un errore durante la ricerca dell\'indirizzo.');
                    });
            } else {
                alert('Inserisci un indirizzo.');
            }
        });

        // Funzione per aggiungere una riga alla tabella con controllo dei campi
        function aggiungiRiga() {
            // Recupera i valori dai campi di input
            const indirizzo = document.getElementById("address").value.trim();
            const latitudine = document.getElementById("latitude").value.trim();
            const longitudine = document.getElementById("longitude").value.trim();
            const codiceComune = document.getElementById("commonCode").value.trim();
            const codiceCatastale = document.getElementById("cadastralCode").value.trim();
            const tipodiedificio = document.getElementById("buildingType").value.trim();
            const datadipredisposizione = document.getElementById("preparationDate").value.trim();
        
            // Controllo se tutti i campi sono compilati
            if (!indirizzo || !latitudine || !longitudine || !codiceComune || 
                !codiceCatastale || !tipodiedificio || !datadipredisposizione) {
                alert("Compila tutti i campi prima di aggiungere l'edificio!");
                return; // Blocca l'inserimento
            }
        
            // Crea una nuova riga nella tabella
            const tabella = document.querySelector("#buildingTableBody");
            const nuovaRiga = tabella.insertRow();
        
            // Crea le celle della riga e inserisci i valori
            const celle = [];
            for (let i = 0; i < 7; i++) {
                celle.push(nuovaRiga.insertCell());
            }
        
            celle[0].textContent = indirizzo;
            celle[1].textContent = latitudine;
            celle[2].textContent = longitudine;
            celle[3].textContent = codiceComune;
            celle[4].textContent = codiceCatastale;
            celle[5].textContent = tipodiedificio;
            celle[6].textContent = datadipredisposizione;
        
            // Aggiungi i pulsanti di modifica e cancellazione
            const azioniCell = nuovaRiga.insertCell();
            azioniCell.innerHTML = `
                <button class="btn btn-sm btn-primary" onclick="modificaRiga(this)"><i class="fas fa-edit"></i></button>
                <button class="btn btn-sm btn-danger" onclick="cancellaRiga(this)"><i class="fas fa-trash"></i></button>
            `;
        
            // Resetta i campi del form dopo l'inserimento
            document.getElementById("buildingForm").reset();
        }


        // Collega la funzione aggiungiRiga() al pulsante "Aggiungi"
        document.getElementById('add').addEventListener('click', function() {
            aggiungiRiga();
        });

        // Funzione per modificare una riga
        function modificaRiga(button) {
            const riga = button.parentNode.parentNode;
            const celle = riga.cells;

            // Popola i campi del form con i dati della riga
            document.getElementById("address").value = celle[0].textContent;
            document.getElementById("latitude").value = celle[1].textContent;
            document.getElementById("longitude").value = celle[2].textContent;
            document.getElementById("commonCode").value = celle[3].textContent;
            document.getElementById("cadastralCode").value = celle[4].textContent;
            document.getElementById("buildingType").value = celle[5].textContent;
            document.getElementById("preparationDate").value = celle[6].textContent;

            // Rimuovi la riga dalla tabella
            riga.remove();
        }

        // Funzione per cancellare una riga con conferma
function cancellaRiga(button) {
    // Mostra un alert di conferma
    const isConfirmed = confirm("Sei sicuro di voler eliminare questa riga?");
    
    // Se l'utente conferma, elimina la riga
    if (isConfirmed) {
        const riga = button.parentNode.parentNode;
        riga.remove();
    }
}

        // Gestione dell'invio dei dati
        document.getElementById('submitButton').addEventListener('click', function() {
            alert('Dati inviati!');
        });

        // Funzione per cancellare tutti i campi del modulo
        function resetForm() {
            document.getElementById("buildingForm").reset();
        }
    
        // Aggiungi evento al pulsante "Annulla"
        document.getElementById('cancellaRiga').addEventListener('click', function() {
            resetForm();
        });
    </script>
    <script src="https://elevenlabs.io/convai-widget/index.js" async type="text/javascript"></script>
    <div id="ai-widget-container" style="position: fixed; bottom: 20px; right: 20px;">
        <elevenlabs-convai agent-id="2MJWbkNuIGTHNI71hKfL"></elevenlabs-convai>
    </div>
    <!-- Footer -->
    <footer id="footer" class="it-footer bg-black mt-5" role="contentinfo"></footer>
    <footer id="footer" class="it-footer bg-black" role="contentinfo">
        <div class="it-footer-main py-3">
            <div class="container">
                <section class="py-4">
                    <div class="row">
                        <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
                            <div class="link-list-wrapper">
                                <h2 class="h5">Esplora SINFI</h2>
                                <ul id="footer-menu-col-1" class="link-list">
                                    <li id="menu-item-sinfi-1" class="menu-item">
                                        <a class="list-item" href="https://sinfi.it/portal/sinfi-menu/che-cose/">Cos'è SINFI</a>
                                    </li>
                                    <li id="menu-item-sinfi-2" class="menu-item">
                                        <a class="list-item" href="https://sinfi.it/realms/master/protocol/openid-connect/auth?client_id=sinfi_user_service&response_type=code&redirect_uri=https://sinfi.it/sinfi_gateway/labs_keycloak/post_login/&scope=email&state=">Infrastrutture Registrate</a>
                                    </li>
                                    <li id="menu-item-sinfi-3" class="menu-item">
                                        <a class="list-item" href="https://sinfi.it/portal/sinfi-menu/riferimenti-normativi/">Normative di Riferimento</a>
                                    </li>
                                    <li id="menu-item-sinfi-4" class="menu-item">
                                        <a class="list-item" href="https://sinfi.it/realms/master/protocol/openid-connect/auth?client_id=sinfi_user_service&response_type=code&redirect_uri=https://sinfi.it/sinfi_gateway/labs_keycloak/post_login/&scope=email&state=">Open Data SINFI</a>
                                    </li>
                                </ul>
                            </div>
                        </div>
                        <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
                            <div class="link-list-wrapper">
                                <h2 class="h5">Aiuto e Supporto</h2>
                                <ul id="footer-menu-col-2" class="link-list">
                                    <li id="menu-item-aiuto-1" class="menu-item">
                                        <a class="list-item" href="./instructions.html">Istruzioni</a>
                                    </li>
                                    <li id="menu-item-aiuto-2" class="menu-item">
                                        <a class="list-item" href="./faq.html">FAQ - Domande Frequenti</a>
                                    </li>
                                    <li id="menu-item-aiuto-3" class="menu-item">
                                        <a class="list-item" href="./techsup.html">Segnalazioni e Supporto Tecnico</a>
                                    </li>
                                </ul>
                            </div>
                        </div>
                        <!-- Colonna "Community" con i loghi dei social -->
                        <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
                            <div class="link-list-wrapper">
                                <h2 class="h5">Community</h2>
                                <div class="social-icons">
                                    <a href="https://www.linkedin.com" target="_blank" class="me-3"><i class="fab fa-linkedin"></i></a>
                                    <a href="https://www.youtube.com" target="_blank" class="me-3"><i class="fab fa-youtube"></i></a>
                                    <a href="https://www.facebook.com" target="_blank" class="me-3"><i class="fab fa-facebook"></i></a>
                                    <a href="https://www.instagram.com" target="_blank" class="me-3"><i class="fab fa-instagram"></i></a>
                                </div>
                            </div>
                        </div>
                        <div class="col-lg-3 col-md-3 col-sm-6 pb-2">
                            <div class="link-list-wrapper">
                                <h2 class="h5">SINFI</h2>
                                <ul id="footer-menu-col-4" class="link-list">
                                    <li id="menu-item-377" class="menu-item">
                                        <a target="_blank" href="https://sinfi.it/portal/">Vai al sito ufficiale SINFI</a>
                                    </li>
                                </ul>
                            </div>
                        </div>
                    </div>
                </section>
            </div>
        </div>
        <div class="it-footer-small-prints clearfix">
            <div class="container">
                <nav class="menu-footer-menu-ita-container" aria-label="link utili">
                    <ul id="menu-footer-menu-ita" class="it-footer-small-prints-list list-inline mb-0 d-flex flex-column flex-md-row">
                        <li id="menu-item-413" class="menu-item list-inline-item"><a href="/media-policy/">Media Policy</a></li>
                        <li id="menu-item-453" class="menu-item list-inline-item"><a href="/note-legali/">Privacy Policy &amp; Note Legali</a></li>
                        <li id="menu-item-1310" class="menu-item list-inline-item"><a target="_blank" href="https://form.agid.gov.it/view/9df3de50-7a42-11ef-8989-9dcab5eaa914">Dichiarazione di accessibilità</a></li>
                        <li id="menu-item-411" class="menu-item list-inline-item"><a href="/mappa-del-sito/">Mappa del sito</a></li>
                        <li id="menu-item-1277" class="menu-item list-inline-item"><a href="/open-data-spid/">Open Data SPID</a></li>
                    </ul>
                </nav>
            </div>
        </div>
    </footer>
</body>
</html>