<?php
if (!defined('ABSPATH')) {
    exit;
}

global $wpdb;
$table_name = $wpdb->prefix.RINNOVOBOOKINGPREFIX.'_bookings';
$table_sedi = $wpdb->prefix.RINNOVOBOOKINGPREFIX.'_sedi';

// Recupero il periodo selezionato
$periodo = isset($_GET['periodo']) ? sanitize_text_field($_GET['periodo']) : 'mese';
$data_inizio = '';
$data_fine = '';

// Gestione date personalizzate
if (isset($_GET['data_inizio']) && isset($_GET['data_fine'])) {
    $data_inizio = sanitize_text_field($_GET['data_inizio']);
    $data_fine = sanitize_text_field($_GET['data_fine']);
} else {
    switch($periodo) {
        case 'oggi':
            $data_inizio = date('Y-m-d');
            $data_fine = date('Y-m-d');
            break;
        case 'settimana':
            $data_inizio = date('Y-m-d', strtotime('-7 days'));
            $data_fine = date('Y-m-d');
            break;
        case 'mese':
            $data_inizio = date('Y-m-d', strtotime('-30 days'));
            $data_fine = date('Y-m-d');
            break;
        case 'anno':
            $data_inizio = date('Y-m-d', strtotime('-365 days'));
            $data_fine = date('Y-m-d');
            break;
    }
}

// Query per le statistiche generali
$stats = $wpdb->get_row($wpdb->prepare("
    SELECT 
        COUNT(*) as totale_prenotazioni,
        SUM(CASE WHEN stato = 'active' THEN 1 ELSE 0 END) as prenotazioni_attive,
        SUM(CASE WHEN stato = 'sold' THEN 1 ELSE 0 END) as prenotazioni_pagate,
        SUM(CASE WHEN stato = 'closed' THEN 1 ELSE 0 END) as prenotazioni_chiuse
    FROM $table_name 
    WHERE date BETWEEN %s AND %s
", $data_inizio, $data_fine));

// Query per i totali dettagliati per sede
$totali_per_sede = $wpdb->get_results($wpdb->prepare("
    SELECT 
        s.nome as sede,
        COUNT(b.id) as totale_prenotazioni,
        SUM(CASE WHEN b.stato = 'active' THEN 1 ELSE 0 END) as prenotazioni_attive,
        SUM(CASE WHEN b.stato = 'sold' THEN 1 ELSE 0 END) as prenotazioni_pagate,
        SUM(CASE WHEN b.stato = 'closed' THEN 1 ELSE 0 END) as prenotazioni_chiuse
    FROM $table_sedi s
    LEFT JOIN $table_name b ON b.idsede = s.idsede AND b.date BETWEEN %s AND %s
    GROUP BY s.idsede, s.nome
    ORDER BY s.nome ASC
", $data_inizio, $data_fine));

// Query per le prenotazioni per sede
$prenotazioni_per_sede = $wpdb->get_results($wpdb->prepare("
    SELECT s.nome as sede, COUNT(b.id) as totale
    FROM $table_sedi s
    LEFT JOIN $table_name b ON b.idsede = s.idsede AND b.date BETWEEN %s AND %s
    GROUP BY s.idsede, s.nome
    ORDER BY totale DESC
", $data_inizio, $data_fine));

// Query per le prenotazioni per giorno
$prenotazioni_per_giorno = $wpdb->get_results($wpdb->prepare("
    SELECT date, COUNT(*) as totale
    FROM $table_name
    WHERE date BETWEEN %s AND %s
    GROUP BY date
    ORDER BY date ASC
", $data_inizio, $data_fine));

// Gestione invio email
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['send_email'])) {
    $to = sanitize_email($_POST['email']);
    $subject = 'Report Prenotazioni - ' . date('d/m/Y');
    
    // Prepara il contenuto HTML dell'email
    $message = '<html><body>';
    $message .= '<h2>Report Prenotazioni</h2>';
    $message .= '<p>Periodo: ' . date('d/m/Y', strtotime($data_inizio)) . ' - ' . date('d/m/Y', strtotime($data_fine)) . '</p>';
    
    // Aggiungi la tabella
    $message .= '<table style="width: 100%; border-collapse: collapse; margin: 20px 0;">';
    $message .= '<tr style="background-color: #f5f5f5;">';
    $message .= '<th style="padding: 10px; border: 1px solid #ddd;">Sede</th>';
    $message .= '<th style="padding: 10px; border: 1px solid #ddd;">Totale Prenotazioni</th>';
    $message .= '<th style="padding: 10px; border: 1px solid #ddd;">Attive</th>';
    $message .= '<th style="padding: 10px; border: 1px solid #ddd;">Pagate</th>';
    $message .= '<th style="padding: 10px; border: 1px solid #ddd;">Chiuse</th>';
    $message .= '</tr>';
    
    foreach ($totali_per_sede as $sede) {
        $message .= '<tr>';
        $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . esc_html($sede->sede) . '</td>';
        $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . esc_html($sede->totale_prenotazioni) . '</td>';
        $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . esc_html($sede->prenotazioni_attive) . '</td>';
        $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . esc_html($sede->prenotazioni_pagate) . '</td>';
        $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . esc_html($sede->prenotazioni_chiuse) . '</td>';
        $message .= '</tr>';
    }
    
    // Aggiungi la riga dei totali
    $message .= '<tr style="background-color: #f0f0f1; font-weight: bold;">';
    $message .= '<td style="padding: 10px; border: 1px solid #ddd;">Totale Generale</td>';
    $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . $stats->totale_prenotazioni . '</td>';
    $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . $stats->prenotazioni_attive . '</td>';
    $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . $stats->prenotazioni_pagate . '</td>';
    $message .= '<td style="padding: 10px; border: 1px solid #ddd;">' . $stats->prenotazioni_chiuse . '</td>';
    $message .= '</tr>';
    $message .= '</table>';
    
    $message .= '<p>Report generato il ' . date('d/m/Y') . '</p>';
    $message .= '</body></html>';
    
    // Headers per email HTML
    $headers = array(
        'Content-Type: text/html; charset=UTF-8',
        'From: ' . get_bloginfo('name') . ' <' . get_bloginfo('admin_email') . '>'
    );
    
    // Invia l'email
    $sent = wp_mail($to, $subject, $message, $headers);
    
    if ($sent) {
        echo '<div class="notice notice-success"><p>Report inviato con successo a ' . esc_html($to) . '</p></div>';
    } else {
        echo '<div class="notice notice-error"><p>Errore durante l\'invio del report</p></div>';
    }
}

?>

<div class="wrap">
    <h1>Report Prenotazioni</h1>

    <!-- Filtro periodo -->
    <div class="tablenav top">
        <div class="alignleft actions">
            <form method="GET" id="filter-form">
                <div style="display: flex; align-items: center; gap: 10px; margin-bottom: 10px;">
                <input type="hidden" name="page" value="<?php echo RINNOVOBOOKINGPREFIX; ?>reportprenotazioni">
                <select name="periodo" id="periodo-select" onchange="toggleDateInputs()">
                    <option value="oggi" <?php selected($periodo, 'oggi'); ?>>Oggi</option>
                    <option value="settimana" <?php selected($periodo, 'settimana'); ?>>Ultimi 7 giorni</option>
                    <option value="mese" <?php selected($periodo, 'mese'); ?>>Ultimi 30 giorni</option>
                    <option value="anno" <?php selected($periodo, 'anno'); ?>>Ultimo anno</option>
                    <option value="personalizzato" <?php selected($periodo, 'personalizzato'); ?>>Periodo personalizzato</option>
                </select>
                <div id="date-inputs" style="display: none; ">
                    <label for="data_inizio">Data inizio:</label>
                    <input type="date" id="data_inizio" name="data_inizio" value="<?php echo $data_inizio; ?>">
                    <label for="data_fine" style="margin-left: 10px;">Data fine:</label>
                    <input type="date" id="data_fine" name="data_fine" value="<?php echo $data_fine; ?>">
                </div>
                <div style="float: right;">
                    <button type="submit" class="button" style="margin-left: 10px;">Applica Filtri</button>
                </div>
            </form>
        </div>
    </div>

    <!-- Statistiche generali -->
    <div class="postbox-container" style="width: 100%;">
        <div class="postbox">
            <h2 class="hndle">Statistiche Generali</h2>
            <div class="inside">
                <div style="display: grid; grid-template-columns: repeat(4, 1fr); gap: 20px; padding: 20px;">
                    <div class="stat-box">
                        <h3>Totale Prenotazioni</h3>
                        <p class="stat-number"><?php echo $stats->totale_prenotazioni; ?></p>
                    </div>
                    <div class="stat-box">
                        <h3>Prenotazioni Attive</h3>
                        <p class="stat-number"><?php echo $stats->prenotazioni_attive; ?></p>
                    </div>
                    <div class="stat-box">
                        <h3>Prenotazioni Pagate</h3>
                        <p class="stat-number"><?php echo $stats->prenotazioni_pagate; ?></p>
                    </div>
                    <div class="stat-box">
                        <h3>Prenotazioni Chiuse</h3>
                        <p class="stat-number"><?php echo $stats->prenotazioni_chiuse; ?></p>
                    </div>
                </div>
            </div>
        </div>
    </div>

    <!-- Prenotazioni per sede -->
    <div class="postbox-container" style="width: 100%; margin-top: 20px;">
        <div class="postbox">
            <h2 class="hndle">Prenotazioni per Sede</h2>
            <div class="inside">
                <table class="wp-list-table widefat fixed striped">
                    <thead>
                        <tr>
                            <th>Sede</th>
                            <th>Totale Prenotazioni</th>
                        </tr>
                    </thead>
                    <tbody>
                        <?php foreach ($prenotazioni_per_sede as $sede): ?>
                        <tr>
                            <td><?php echo esc_html($sede->sede); ?></td>
                            <td><?php echo esc_html($sede->totale); ?></td>
                        </tr>
                        <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        </div>
    </div>

    <!-- Grafico prenotazioni per giorno -->
    <div class="postbox-container" style="width: 100%; margin-top: 20px;">
        <div class="postbox">
            <h2 class="hndle">Andamento Prenotazioni</h2>
            <div class="inside">
                <canvas id="prenotazioniChart" style="height: 200px !important;"></canvas>
            </div>
        </div>
    </div>

    <!-- Totali dettagliati per sede -->
    <div class="postbox-container" style="width: 100%; margin-top: 20px;">
        <div class="postbox">
            <h2 class="hndle">
                Totali Dettagliati per Sede
                <div style="float: right;">
                    <button onclick="showEmailModal()" class="button button-secondary" style="margin-right: 10px;">Invia per Email</button>
                    <button onclick="generatePrintView()" class="button button-primary">Stampa Report</button>
                </div>
            </h2>
            <div class="inside">
                <div id="printable-report">
                    <div class="report-header">
                        <h2>Report Prenotazioni</h2>
                        <p>Periodo: <?php echo date('d/m/Y', strtotime($data_inizio)) . ' - ' . date('d/m/Y', strtotime($data_fine)); ?></p>
                    </div>

                    <table class="wp-list-table widefat fixed striped">
                        <thead>
                            <tr>
                                <th>Sede</th>
                                <th>Totale Prenotazioni</th>
                                <th>Attive</th>
                                <th>Pagate</th>
                                <th>Chiuse</th>
                            </tr>
                        </thead>
                        <tbody>
                            <?php foreach ($totali_per_sede as $sede): ?>
                            <tr>
                                <td><?php echo esc_html($sede->sede); ?></td>
                                <td><?php echo esc_html($sede->totale_prenotazioni); ?></td>
                                <td><?php echo esc_html($sede->prenotazioni_attive); ?></td>
                                <td><?php echo esc_html($sede->prenotazioni_pagate); ?></td>
                                <td><?php echo esc_html($sede->prenotazioni_chiuse); ?></td>
                            </tr>
                            <?php endforeach; ?>
                            <tr class="total-row">
                                <td><strong>Totale Generale</strong></td>
                                <td><strong><?php echo $stats->totale_prenotazioni; ?></strong></td>
                                <td><strong><?php echo $stats->prenotazioni_attive; ?></strong></td>
                                <td><strong><?php echo $stats->prenotazioni_pagate; ?></strong></td>
                                <td><strong><?php echo $stats->prenotazioni_chiuse; ?></strong></td>
                            </tr>
                        </tbody>
                    </table>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- Modal per l'invio email -->
<div id="emailModal" class="modal" style="display: none;">
    <div class="modal-content">
        <span class="close" onclick="closeEmailModal()">&times;</span>
        <h2>Invia Report per Email</h2>
        <form method="POST">
            <div style="margin: 20px 0;">
                <label for="email" style="display: block; margin-bottom: 10px;">Indirizzo Email:</label>
                <input type="email" id="email" name="email" required style="width: 100%; padding: 8px;">
            </div>
            <div style="text-align: right;">
                <button type="button" class="button" onclick="closeEmailModal()">Annulla</button>
                <button type="submit" name="send_email" class="button button-primary">Invia</button>
            </div>
        </form>
    </div>
</div>

<style>
.stat-box {
    background: #fff;
    padding: 20px;
    border-radius: 5px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
    text-align: center;
}

.stat-number {
    font-size: 24px;
    font-weight: bold;
    color: #2271b1;
    margin: 10px 0;
}

.hndle {
    padding: 10px 15px;
    border-bottom: 1px solid #ccd0d4;
}

.total-row {
    background-color: #f0f0f1 !important;
    font-weight: bold;
}

.report-header {
    text-align: center;
    margin-bottom: 20px;
    padding: 20px;
    border-bottom: 2px solid #2271b1;
}

.print-layout {
    display: none;
    position: fixed;
    top: 50px;
    left: 0;
    width: 100%;
    height: calc(100% - 50px);
    background: #f5f5f5;
    z-index: 9999;
    padding: 20px;
    box-sizing: border-box;
    overflow-y: auto;
    border: 1px solid #000;
}

.print-layout .print-header {
    text-align: center;
    margin-bottom: 30px;
    padding-bottom: 20px;
    border-bottom: 2px solid #2271b1;
    background: white;
    padding: 20px;
    margin: 0 0 20px 0;
}

.print-layout .print-header h1 {
    font-size: 24px;
    margin: 0 0 10px 0;
    color: #2271b1;
}

.print-layout .print-header p {
    font-size: 14px;
    margin: 0;
    color: #666;
}

.print-layout .print-table {
    width: 100%;
    border-collapse: collapse;
    margin-bottom: 30px;
    background: white;
}

.print-layout .print-table th,
.print-layout .print-table td {
    padding: 10px;
    border: 1px solid #ddd;
    text-align: left;
}

.print-layout .print-table th {
    background-color: #f5f5f5;
    font-weight: bold;
}

.print-layout .print-table tr.total-row {
    background-color: #f0f0f1;
    font-weight: bold;
}

.print-layout .print-footer {
    text-align: center;
    margin-top: 30px;
    padding-top: 20px;
    border-top: 1px solid #ddd;
    font-size: 12px;
    color: #666;
    background: white;
    padding: 20px;
}

.print-layout .print-actions {
    position: fixed;
    top: 70px;
    right: 20px;
    z-index: 10000;
    background: white;
    padding: 10px;
    border-radius: 4px;
}

.print-layout .print-actions button {
    margin-left: 10px;
    padding: 8px 15px;
    background: #2271b1;
    color: white;
    border: none;
    border-radius: 4px;
    cursor: pointer;
}

.print-layout .print-actions button:hover {
    background: #135e96;
}

.modal {
    display: none;
    position: fixed;
    z-index: 10000;
    left: 0;
    top: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0,0,0,0.5);
}

.modal-content {
    background-color: #fefefe;
    margin: 15% auto;
    padding: 20px;
    border: 1px solid #888;
    width: 50%;
    max-width: 500px;
    border-radius: 4px;
    position: relative;
}

.close {
    color: #aaa;
    float: right;
    font-size: 28px;
    font-weight: bold;
    cursor: pointer;
}

.close:hover {
    color: black;
}
</style>

<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
    const ctx = document.getElementById('prenotazioniChart').getContext('2d');
    const dates = <?php echo json_encode(array_column($prenotazioni_per_giorno, 'date')); ?>;
    const totals = <?php echo json_encode(array_column($prenotazioni_per_giorno, 'totale')); ?>;

    new Chart(ctx, {
        type: 'line',
        data: {
            labels: dates,
            datasets: [{
                label: 'Prenotazioni per giorno',
                data: totals,
                borderColor: '#2271b1',
                backgroundColor: 'rgba(34, 113, 177, 0.1)',
                tension: 0.1,
                fill: true
            }]
        },
        options: {
            responsive: true,
            maintainAspectRatio: false,
            plugins: {
                legend: {
                    position: 'top',
                },
                title: {
                    display: true,
                    text: 'Andamento prenotazioni'
                }
            },
            scales: {
                y: {
                    beginAtZero: true,
                    ticks: {
                        stepSize: 1
                    }
                }
            }
        }
    });
});

function generatePrintView() {
    // Crea il contenitore per la stampa
    const printContainer = document.createElement('div');
    printContainer.className = 'print-layout';
    
    // Crea l'header
    const header = document.createElement('div');
    header.className = 'print-header';
    header.innerHTML = `
        <h1>Report Prenotazioni</h1>
        <p>Periodo: ${document.querySelector('.report-header p').textContent}</p>
    `;
    
    // Crea la tabella
    const table = document.createElement('table');
    table.className = 'print-table';
    table.innerHTML = document.querySelector('#printable-report table').innerHTML;
    
    // Crea il footer
    const footer = document.createElement('div');
    footer.className = 'print-footer';
    footer.innerHTML = `
        <p>Report generato il ${new Date().toLocaleDateString('it-IT')}</p>
    `;
    
    // Crea i pulsanti di azione
    const actions = document.createElement('div');
    actions.className = 'print-actions';
    actions.innerHTML = `
        <button onclick="window.print()">Stampa</button>
        <button onclick="closePrintView()">Chiudi</button>
    `;
    
    // Assembla il layout
    printContainer.appendChild(actions);
    printContainer.appendChild(header);
    printContainer.appendChild(table);
    printContainer.appendChild(footer);
    
    // Aggiungi al body
    document.body.appendChild(printContainer);
    printContainer.style.display = 'block';
}

function closePrintView() {
    const printLayout = document.querySelector('.print-layout');
    if (printLayout) {
        printLayout.remove();
    }
}

function showEmailModal() {
    document.getElementById('emailModal').style.display = 'block';
}

function closeEmailModal() {
    document.getElementById('emailModal').style.display = 'none';
}

// Chiudi il modal se si clicca fuori
window.onclick = function(event) {
    const modal = document.getElementById('emailModal');
    if (event.target == modal) {
        modal.style.display = 'none';
    }
}

function toggleDateInputs() {
    const periodoSelect = document.getElementById('periodo-select');
    const dateInputs = document.getElementById('date-inputs');
    
    if (periodoSelect.value === 'personalizzato') {
        dateInputs.style.display = 'inline-block';
    } else {
        dateInputs.style.display = 'none';
    }
}

// Inizializza lo stato dei campi data al caricamento della pagina
document.addEventListener('DOMContentLoaded', function() {
    toggleDateInputs();
});
</script>
