/**
 * Widget Ricerca Annunci - Alpine.js Component
 *
 * @package AnnunciFunebri
 * @since 4.8.0
 */

document.addEventListener('alpine:init', () => {
    Alpine.data('annfuRicerca', (config) => ({
        loading: true,
        ricercaEffettuata: false,
        risultati: [],
        totale: 0,
        paginaCorrente: 1,
        risultatiPerPagina: config.perPagina,
        numeroPagineDaMostrare: config.numeroPagine,
        modalitaRicerca: config.tipoRicerca === 'entrambe' ? 'semplice' : config.tipoRicerca,
        placeholderUrl: config.placeholderUrl,
        animationClasses: config.animClasses,
        animationStyle: config.animStyle,
        tipoVisualizzazione: config.tipoVisualizzazione,
        nomeDentroFoto: config.nomeDentroFoto,
        apiUrl: config.apiUrl,
        onoranzaId: config.onoranzaId,
        filtriSemplici: {
            text: ''
        },
        filtriAvanzati: {
            nome: '',
            cognome: '',
            dal: '',
            al: '',
            regione: '',
            provincia: '',
            paese: ''
        },

        init() {
            // Carica gli ultimi annunci all'avvio
            this.caricaAnnunciIniziali();
        },

        caricaAnnunciIniziali() {
            this.loading = true;
            const url = this.apiUrl + '/v2/annunci?onoranza_funebre_id=' + this.onoranzaId + '&limit=' + this.risultatiPerPagina;

            fetch(url)
                .then(response => response.json())
                .then(data => {
                    this.risultati = data.data || [];
                    // Prova diverse strutture per il totale
                    if (data.metaData && data.metaData.results) {
                        this.totale = data.metaData.results;
                    } else if (data.total) {
                        this.totale = data.total;
                    } else if (data.metaData && data.metaData.total) {
                        this.totale = data.metaData.total;
                    } else {
                        this.totale = this.risultati.length;
                    }
                    console.log('Totale risultati:', this.totale, 'Risultati per pagina:', this.risultatiPerPagina, 'Totale pagine:', this.totalePagine);
                    this.loading = false;
                })
                .catch(error => {
                    console.error('Errore caricamento annunci iniziali:', error);
                    this.risultati = [];
                    this.totale = 0;
                    this.loading = false;
                });
        },

        get totalePagine() {
            return Math.ceil(this.totale / this.risultatiPerPagina);
        },

        get pagineDaMostrare() {
            const pagine = [];
            const totale = this.totalePagine;
            const corrente = this.paginaCorrente;
            const range = this.numeroPagineDaMostrare;

            for (let p = 1; p <= totale; p++) {
                if (Math.abs(p - corrente) < range) {
                    pagine.push(p);
                }
            }
            return pagine;
        },

        vaiAPagina(pagina) {
            if (pagina >= 1 && pagina <= this.totalePagine && pagina !== this.paginaCorrente) {
                this.paginaCorrente = pagina;
                this.caricaPagina();
            }
        },

        cercaAnnunciSemplice() {
            this.loading = true;
            this.ricercaEffettuata = true;
            this.paginaCorrente = 1;

            let url = this.apiUrl + '/v2/annunci?onoranza_funebre_id=' + this.onoranzaId + '&limit=' + this.risultatiPerPagina;

            if (this.filtriSemplici.text) {
                url += '&text=' + encodeURIComponent(this.filtriSemplici.text);
            }

            this.eseguiRicerca(url);
        },

        cercaAnnunciAvanzata() {
            this.loading = true;
            this.ricercaEffettuata = true;
            this.paginaCorrente = 1;

            let url = this.apiUrl + '/v2/annunci?onoranza_funebre_id=' + this.onoranzaId + '&limit=' + this.risultatiPerPagina;

            if (this.filtriAvanzati.nome) {
                url += '&nome=' + encodeURIComponent(this.filtriAvanzati.nome);
            }
            if (this.filtriAvanzati.cognome) {
                url += '&cognome=' + encodeURIComponent(this.filtriAvanzati.cognome);
            }
            if (this.filtriAvanzati.dal) {
                url += '&dal=' + encodeURIComponent(this.filtriAvanzati.dal);
            }
            if (this.filtriAvanzati.al) {
                url += '&al=' + encodeURIComponent(this.filtriAvanzati.al);
            }
            if (this.filtriAvanzati.regione) {
                url += '&regione=' + encodeURIComponent(this.filtriAvanzati.regione);
            }
            if (this.filtriAvanzati.provincia) {
                url += '&provincia=' + encodeURIComponent(this.filtriAvanzati.provincia);
            }
            if (this.filtriAvanzati.paese) {
                url += '&comune=' + encodeURIComponent(this.filtriAvanzati.paese);
            }

            this.eseguiRicerca(url);
        },

        mostraTutti() {
            this.filtriSemplici.text = '';
            this.ricercaEffettuata = false;
            this.caricaAnnunciIniziali();
        },

        eseguiRicerca(url) {
            fetch(url)
                .then(response => response.json())
                .then(data => {
                    this.risultati = data.data || [];
                    if (data.metaData && data.metaData.results) {
                        this.totale = data.metaData.results;
                    } else if (data.total) {
                        this.totale = data.total;
                    } else if (data.metaData && data.metaData.total) {
                        this.totale = data.metaData.total;
                    } else {
                        this.totale = this.risultati.length;
                    }
                    console.log('Ricerca - Totale risultati:', this.totale, 'Totale pagine:', this.totalePagine);
                    this.loading = false;
                })
                .catch(error => {
                    console.error('Errore ricerca:', error);
                    this.risultati = [];
                    this.totale = 0;
                    this.loading = false;
                });
        },

        paginaSuccessiva() {
            if (this.paginaCorrente < this.totalePagine) {
                this.paginaCorrente++;
                this.caricaPagina();
            }
        },

        paginaPrecedente() {
            if (this.paginaCorrente > 1) {
                this.paginaCorrente--;
                this.caricaPagina();
            }
        },

        caricaPagina() {
            this.loading = true;
            let url = this.apiUrl + '/v2/annunci?onoranza_funebre_id=' + this.onoranzaId + '&limit=' + this.risultatiPerPagina + '&page=' + this.paginaCorrente;

            // Riapplica gli stessi filtri
            if (this.modalitaRicerca === 'semplice') {
                if (this.filtriSemplici.text) {
                    url += '&text=' + encodeURIComponent(this.filtriSemplici.text);
                }
            } else {
                if (this.filtriAvanzati.nome) url += '&nome=' + encodeURIComponent(this.filtriAvanzati.nome);
                if (this.filtriAvanzati.cognome) url += '&cognome=' + encodeURIComponent(this.filtriAvanzati.cognome);
                if (this.filtriAvanzati.dal) url += '&dal=' + encodeURIComponent(this.filtriAvanzati.dal);
                if (this.filtriAvanzati.al) url += '&al=' + encodeURIComponent(this.filtriAvanzati.al);
                if (this.filtriAvanzati.regione) url += '&regione=' + encodeURIComponent(this.filtriAvanzati.regione);
                if (this.filtriAvanzati.provincia) url += '&provincia=' + encodeURIComponent(this.filtriAvanzati.provincia);
                if (this.filtriAvanzati.paese) url += '&comune=' + encodeURIComponent(this.filtriAvanzati.paese);
            }

            fetch(url)
                .then(response => response.json())
                .then(data => {
                    this.risultati = data.data || [];
                    this.loading = false;
                    window.scrollTo({ top: 0, behavior: 'smooth' });
                })
                .catch(error => {
                    console.error('Errore caricamento pagina:', error);
                    this.loading = false;
                });
        }
    }));
});
