<?php
include 'verifica_login.php';
include 'conexao.php';
include 'funcoes_classificacao.php';

$conn = conectar_banco();

if (isset($_GET['action']) && $_GET['action'] === 'status_por_questionario') {
    header('Content-Type: application/json; charset=utf-8');

    $id_questionario = (int)($_GET['id_questionario'] ?? 0);
    if ($id_questionario <= 0) {
        echo json_encode(['success' => false, 'message' => 'Questionário inválido']);
        exit;
    }

    $sql_status_questionario = "
        SELECT
            s.id_status,
            s.nome_status,
            COUNT(CASE WHEN p.id IS NOT NULL THEN pe.id END) AS total
        FROM statusdoquestionario s
        LEFT JOIN pesquisa_empresa pe
            ON pe.id_status_questionario_fk = s.id_status
        LEFT JOIN pesquisas p
            ON p.id = pe.id_pesquisa_fk
           AND p.id_questionario_template_fk = ?
        GROUP BY s.id_status, s.nome_status
        HAVING total > 0
        ORDER BY s.nome_status
    ";

    $stmt_status_questionario = $conn->prepare($sql_status_questionario);
    if (!$stmt_status_questionario) {
        echo json_encode(['success' => false, 'message' => 'Erro ao consultar status']);
        exit;
    }

    $stmt_status_questionario->bind_param('i', $id_questionario);
    $stmt_status_questionario->execute();
    $res_status_questionario = $stmt_status_questionario->get_result();

    $labels = [];
    $data = [];
    while ($row = $res_status_questionario->fetch_assoc()) {
        $labels[] = $row['nome_status'];
        $data[] = (int)$row['total'];
    }

    echo json_encode([
        'success' => true,
        'labels' => $labels,
        'data' => $data
    ]);
    exit;
}

// Buscar dados para gráfico de status
$sql_status = "SELECT s.nome_status, COUNT(*) as total 
               FROM qualificacao_belgo q
               INNER JOIN statusdoquestionario s ON q.id_status_fk = s.id_status
               GROUP BY q.id_status_fk, s.nome_status
               ORDER BY s.nome_status";
$res_status = $conn->query($sql_status);

$status_labels = [];
$status_data = [];
$status_colors = ['#4CAF50', '#2196F3', '#FF9800', '#F44336', '#9C27B0', '#00BCD4', '#FFEB3B', '#795548'];

while ($row = $res_status->fetch_assoc()) {
    $status_labels[] = $row['nome_status'];
    $status_data[] = $row['total'];
}

// Buscar dados para gráfico de classificação (notas)
$sql_classificacao = "SELECT cl.classificacao, cl.cor, COUNT(*) as total
                      FROM qualificacao_belgo q
                      LEFT JOIN classificacao_leads cl ON q.nota_total >= cl.faixa_minima AND q.nota_total <= cl.faixa_maxima
                      GROUP BY cl.classificacao, cl.cor
                      ORDER BY cl.ordem";
$res_classificacao = $conn->query($sql_classificacao);

$classificacao_labels = [];
$classificacao_data = [];
$classificacao_colors = [];

while ($row = $res_classificacao->fetch_assoc()) {
    $classificacao_labels[] = $row['classificacao'] ?: 'Sem Classificação';
    $classificacao_data[] = $row['total'];
    $classificacao_colors[] = $row['cor'] ?: '#999999';
}

// Buscar dados para gráfico de entrevistas por dia (últimos 30 dias)
$sql_entrevistas = "SELECT DATE_FORMAT(data_entrevista, '%d/%m') as data_formatada, 
                          DATE(data_entrevista) as data,
                          COUNT(*) as total
                    FROM qualificacao_belgo
                    WHERE data_entrevista IS NOT NULL 
                      AND data_entrevista >= DATE_SUB(CURDATE(), INTERVAL 30 DAY)
                    GROUP BY DATE(data_entrevista)
                    ORDER BY data";
$res_entrevistas = $conn->query($sql_entrevistas);

$entrevistas_labels = [];
$entrevistas_data = [];

while ($row = $res_entrevistas->fetch_assoc()) {
    $entrevistas_labels[] = $row['data_formatada'];
    $entrevistas_data[] = $row['total'];
}

// Buscar questionários para análise por status
$questionarios = [];
$sql_questionarios = "
    SELECT
        qt.id,
        qt.nome,
        COALESCE(pr.nome_projeto, 'Sem projeto') AS nome_projeto
    FROM questionario_template qt
    LEFT JOIN projetos pr ON pr.id_projeto = qt.id_projeto_fk
    WHERE qt.ativo = 'S'
    ORDER BY qt.nome
";
$res_questionarios = $conn->query($sql_questionarios);
if ($res_questionarios) {
    while ($row = $res_questionarios->fetch_assoc()) {
        $questionarios[] = $row;
    }
}

// Buscar nome da aplicação e empresa da tabela config
$nome_aplicacao = '';
$empresa = '';
$sql_config = "SELECT nomedaaplicacao, empresa FROM config LIMIT 1";
$res_config = $conn->query($sql_config);
if ($res_config && $res_config->num_rows > 0) {
    $row_config = $res_config->fetch_assoc();
    $nome_aplicacao = $row_config['nomedaaplicacao'];
    $empresa = $row_config['empresa'];
}

$conn->close();
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>BI - <?= htmlspecialchars($nome_aplicacao) ?></title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        body {
            font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
        }
        .container {
            max-width: 1400px;
            margin: 0 auto;
        }
        .header {
            background: white;
            padding: 20px;
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            margin-bottom: 20px;
            display: flex;
            justify-content: space-between;
            align-items: center;
        }
        .header h1 {
            color: #333;
            font-size: 28px;
        }
        .header .subtitle {
            color: #666;
            font-size: 14px;
            margin-top: 5px;
        }
        .btn {
            display: inline-block;
            padding: 8px 16px;
            background-color: #4CAF50;
            color: white;
            text-decoration: none;
            border-radius: 5px;
            font-size: 14px;
            transition: all 0.3s;
        }
        .btn:hover {
            transform: translateY(-2px);
            box-shadow: 0 4px 8px rgba(0,0,0,0.2);
        }
        .btn-back {
            background-color: #2196F3;
        }
        .charts-container {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 20px;
            margin-top: 20px;
        }
        .chart-full {
            grid-column: 1 / -1;
        }
        .chart-card {
            background: white;
            padding: 25px;
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        }
        .filter-card {
            background: white;
            padding: 16px 20px;
            border-radius: 10px;
            box-shadow: 0 4px 6px rgba(0,0,0,0.1);
            margin-bottom: 20px;
            display: flex;
            flex-direction: column;
            gap: 8px;
        }
        .filter-card label {
            color: #333;
            font-weight: 600;
        }
        .filter-card select {
            width: 100%;
            max-width: 520px;
            padding: 10px;
            border: 1px solid #cfcfcf;
            border-radius: 6px;
            font-size: 14px;
        }
        .status-analise-msg {
            font-size: 13px;
            color: #444;
        }
        .chart-card h2 {
            color: #333;
            font-size: 20px;
            margin-bottom: 20px;
            text-align: center;
            border-bottom: 3px solid #667eea;
            padding-bottom: 10px;
        }
        .chart-wrapper {
            position: relative;
            height: 400px;
            display: flex;
            justify-content: center;
            align-items: center;
        }
        canvas {
            max-height: 100%;
        }
        @media (max-width: 1024px) {
            .charts-container {
                grid-template-columns: 1fr;
            }
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <div>
                <h1>📊 BI - <?= htmlspecialchars($nome_aplicacao) ?></h1>
                <div class="subtitle"><?= htmlspecialchars($empresa) ?></div>
            </div>
            <a href="principal.php" class="btn btn-back">← Voltar para Principal</a>
        </div>

        <div class="filter-card">
            <label for="questionarioSelect">Análise por Questionário</label>
            <select id="questionarioSelect">
                <option value="">Selecione um questionário...</option>
                <?php foreach ($questionarios as $questionario): ?>
                    <option value="<?= (int)$questionario['id'] ?>">
                        <?= htmlspecialchars($questionario['nome']) ?> — <?= htmlspecialchars($questionario['nome_projeto']) ?>
                    </option>
                <?php endforeach; ?>
            </select>
            <div class="status-analise-msg" id="statusAnaliseMsg">
                Selecione um questionário para exibir os gráficos por status.
            </div>
        </div>

        <div class="charts-container">
            <div class="chart-card">
                <h2>Status por Questionário (Pizza)</h2>
                <div class="chart-wrapper">
                    <canvas id="statusQuestionarioPieChart"></canvas>
                </div>
            </div>

            <div class="chart-card">
                <h2>Status por Questionário (Barras)</h2>
                <div class="chart-wrapper">
                    <canvas id="statusQuestionarioBarChart"></canvas>
                </div>
            </div>

            <div class="chart-card">
                <h2>Distribuição por Status</h2>
                <div class="chart-wrapper">
                    <canvas id="statusChart"></canvas>
                </div>
            </div>

            <div class="chart-card">
                <h2>Distribuição por Classificação</h2>
                <div class="chart-wrapper">
                    <canvas id="classificacaoChart"></canvas>
                </div>
            </div>

            <div class="chart-card chart-full">
                <h2>Entrevistas por Dia (Últimos 30 dias)</h2>
                <div class="chart-wrapper">
                    <canvas id="entrevistasChart"></canvas>
                </div>
            </div>
        </div>
    </div>

    <script>
        // Gráfico de Status
        const statusCtx = document.getElementById('statusChart').getContext('2d');
        const statusChart = new Chart(statusCtx, {
            type: 'pie',
            data: {
                labels: <?= json_encode($status_labels) ?>,
                datasets: [{
                    data: <?= json_encode($status_data) ?>,
                    backgroundColor: <?= json_encode(array_slice($status_colors, 0, count($status_labels))) ?>,
                    borderWidth: 2,
                    borderColor: '#fff'
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        position: 'bottom',
                        labels: {
                            padding: 15,
                            font: {
                                size: 12
                            }
                        }
                    },
                    tooltip: {
                        callbacks: {
                            label: function(context) {
                                const label = context.label || '';
                                const value = context.parsed || 0;
                                const total = context.dataset.data.reduce((a, b) => a + b, 0);
                                const percentage = ((value / total) * 100).toFixed(1);
                                return label + ': ' + value + ' (' + percentage + '%)';
                            }
                        }
                    }
                }
            }
        });

        // Gráfico de Classificação
        const classificacaoCtx = document.getElementById('classificacaoChart').getContext('2d');
        const classificacaoChart = new Chart(classificacaoCtx, {
            type: 'pie',
            data: {
                labels: <?= json_encode($classificacao_labels) ?>,
                datasets: [{
                    data: <?= json_encode($classificacao_data) ?>,
                    backgroundColor: <?= json_encode($classificacao_colors) ?>,
                    borderWidth: 2,
                    borderColor: '#fff'
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        position: 'bottom',
                        labels: {
                            padding: 15,
                            font: {
                                size: 12
                            }
                        }
                    },
                    tooltip: {
                        callbacks: {
                            label: function(context) {
                                const label = context.label || '';
                                const value = context.parsed || 0;
                                const total = context.dataset.data.reduce((a, b) => a + b, 0);
                                const percentage = ((value / total) * 100).toFixed(1);
                                return label + ': ' + value + ' (' + percentage + '%)';
                            }
                        }
                    }
                }
            }
        });

        // Gráfico de Entrevistas por Dia
        const entrevistasCtx = document.getElementById('entrevistasChart').getContext('2d');
        const entrevistasChart = new Chart(entrevistasCtx, {
            type: 'line',
            data: {
                labels: <?= json_encode($entrevistas_labels) ?>,
                datasets: [{
                    label: 'Entrevistas',
                    data: <?= json_encode($entrevistas_data) ?>,
                    backgroundColor: 'rgba(103, 126, 234, 0.2)',
                    borderColor: 'rgba(103, 126, 234, 1)',
                    borderWidth: 3,
                    fill: true,
                    tension: 0.4,
                    pointRadius: 5,
                    pointBackgroundColor: 'rgba(103, 126, 234, 1)',
                    pointBorderColor: '#fff',
                    pointBorderWidth: 2,
                    pointHoverRadius: 7
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        display: false
                    },
                    tooltip: {
                        callbacks: {
                            label: function(context) {
                                return 'Entrevistas: ' + context.parsed.y;
                            }
                        }
                    }
                },
                scales: {
                    y: {
                        beginAtZero: true,
                        ticks: {
                            stepSize: 1,
                            font: {
                                size: 12
                            }
                        },
                        grid: {
                            color: 'rgba(0, 0, 0, 0.05)'
                        }
                    },
                    x: {
                        ticks: {
                            font: {
                                size: 11
                            },
                            maxRotation: 45,
                            minRotation: 45
                        },
                        grid: {
                            display: false
                        }
                    }
                }
            }
        });

        const statusQuestionarioColors = ['#4CAF50', '#2196F3', '#FF9800', '#F44336', '#9C27B0', '#00BCD4', '#FFEB3B', '#795548'];
        const questionarioSelect = document.getElementById('questionarioSelect');
        const statusAnaliseMsg = document.getElementById('statusAnaliseMsg');

        const statusQuestionarioPieCtx = document.getElementById('statusQuestionarioPieChart').getContext('2d');
        const statusQuestionarioPieChart = new Chart(statusQuestionarioPieCtx, {
            type: 'pie',
            data: {
                labels: [],
                datasets: [{
                    data: [],
                    backgroundColor: [],
                    borderWidth: 2,
                    borderColor: '#fff'
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        position: 'bottom'
                    }
                }
            }
        });

        const statusQuestionarioBarCtx = document.getElementById('statusQuestionarioBarChart').getContext('2d');
        const statusQuestionarioBarChart = new Chart(statusQuestionarioBarCtx, {
            type: 'bar',
            data: {
                labels: [],
                datasets: [{
                    label: 'Total',
                    data: [],
                    backgroundColor: [],
                    borderRadius: 6
                }]
            },
            options: {
                responsive: true,
                maintainAspectRatio: false,
                plugins: {
                    legend: {
                        display: false
                    }
                },
                scales: {
                    y: {
                        beginAtZero: true,
                        ticks: {
                            stepSize: 1
                        }
                    }
                }
            }
        });

        function atualizarGraficosStatusQuestionario(labels, values) {
            const colors = labels.map((_, idx) => statusQuestionarioColors[idx % statusQuestionarioColors.length]);

            statusQuestionarioPieChart.data.labels = labels;
            statusQuestionarioPieChart.data.datasets[0].data = values;
            statusQuestionarioPieChart.data.datasets[0].backgroundColor = colors;
            statusQuestionarioPieChart.update();

            statusQuestionarioBarChart.data.labels = labels;
            statusQuestionarioBarChart.data.datasets[0].data = values;
            statusQuestionarioBarChart.data.datasets[0].backgroundColor = colors;
            statusQuestionarioBarChart.update();
        }

        function limparGraficosStatusQuestionario() {
            atualizarGraficosStatusQuestionario([], []);
        }

        async function carregarStatusPorQuestionario(idQuestionario) {
            if (!idQuestionario) {
                statusAnaliseMsg.textContent = 'Selecione um questionário para exibir os gráficos por status.';
                limparGraficosStatusQuestionario();
                return;
            }

            statusAnaliseMsg.textContent = 'Carregando dados do questionário...';

            try {
                const response = await fetch('bi.php?action=status_por_questionario&id_questionario=' + encodeURIComponent(idQuestionario));
                const data = await response.json();

                if (!data.success) {
                    statusAnaliseMsg.textContent = data.message || 'Não foi possível carregar os dados.';
                    limparGraficosStatusQuestionario();
                    return;
                }

                if (!data.labels || data.labels.length === 0) {
                    statusAnaliseMsg.textContent = 'Este questionário ainda não possui registros de status.';
                    limparGraficosStatusQuestionario();
                    return;
                }

                statusAnaliseMsg.textContent = 'Exibindo status do questionário selecionado.';
                atualizarGraficosStatusQuestionario(data.labels, data.data || []);
            } catch (error) {
                statusAnaliseMsg.textContent = 'Erro ao carregar os dados do questionário.';
                limparGraficosStatusQuestionario();
            }
        }

        questionarioSelect.addEventListener('change', function() {
            carregarStatusPorQuestionario(this.value);
        });
    </script>
</body>
</html>
