<?php
session_start();
require_once 'conexao.php';

date_default_timezone_set('America/Sao_Paulo');

// Verificação de autenticação
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    header('Location: login.php');
    exit;
}

// Verificação do tenant
$tenant_id = $_SESSION['tenant_id'] ?? null;
if (!$tenant_id) {
    die("Tenant não identificado.");
}

// Verificação da conexão com o banco
if (!isset($conn) || !($conn instanceof mysqli) || $conn->connect_errno) {
    die("Erro: Conexão com banco de dados não estabelecida corretamente.");
}

// Inicializa variáveis
$startDate = $endDate = $produtoFiltro = null;
$labels = $quantidades = $valores = [];

try {
    // Filtros do formulário
    $startDate = isset($_GET['start_date']) && !empty($_GET['start_date']) ? $_GET['start_date'] : null;
    $endDate = isset($_GET['end_date']) && !empty($_GET['end_date']) ? $_GET['end_date'] : null;
    $produtoFiltro = isset($_GET['produto']) && !empty($_GET['produto']) ? $_GET['produto'] : null;

    // Construção da consulta SQL com prepared statements
    $sql = "SELECT 
                c.Nome_Cliente, 
                cp.nome_produto, 
                SUM(cp.quantidade) AS total_quantidade, 
                SUM(cp.valor * cp.quantidade) AS total_valor
            FROM cliente_produtos cp
            JOIN clientes c ON cp.cliente_id = c.id AND c.tenant_id = ?
            WHERE cp.tenant_id = ?";
    
    $params = [$tenant_id, $tenant_id];
    $types = "ii";

    // Adiciona filtros
    if ($startDate && $endDate) {
        $sql .= " AND cp.data_cadastro BETWEEN ? AND ?";
        $params[] = $startDate . ' 00:00:00';
        $params[] = $endDate . ' 23:59:59';
        $types .= "ss";
    }

    if ($produtoFiltro) {
        $sql .= " AND cp.nome_produto LIKE ?";
        $params[] = "%$produtoFiltro%";
        $types .= "s";
    }

    $sql .= " GROUP BY c.Nome_Cliente, cp.nome_produto
              ORDER BY total_quantidade DESC";

    // Prepara e executa a consulta
    $stmt = $conn->prepare($sql);
    if (!$stmt) {
        throw new Exception("Erro ao preparar consulta: " . $conn->error);
    }

    $stmt->bind_param($types, ...$params);
    $stmt->execute();
    $result = $stmt->get_result();

    // Processa os resultados
    if ($result && $result->num_rows > 0) {
        while ($row = $result->fetch_assoc()) {
            $labels[] = $row['Nome_Cliente'] . " - " . $row['nome_produto'];
            $quantidades[] = (int)$row['total_quantidade'];
            $valores[] = (float)$row['total_valor'];
        }
    }

    $stmt->close();

} catch (Exception $e) {
    $error_message = $e->getMessage();
}
?>
<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Gráfico de Produtos por Cliente</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css">
    <style>
        .chart-container {
            height: 70vh;
            width: 100%;
            margin-top: 20px;
        }
        .filter-card {
            background-color: #f8f9fa;
            border-radius: 8px;
            padding: 20px;
            margin-bottom: 20px;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }
    </style>
</head>
<body>
    <div class="container-fluid py-4">
        <div class="row">
            <div class="col-12">
                <h1 class="mb-4">Relatório de Produtos por Cliente</h1>
                
                <?php if (isset($error_message)): ?>
                    <div class="alert alert-danger"><?= htmlspecialchars($error_message) ?></div>
                <?php endif; ?>

                <div class="filter-card">
                    <form method="GET" class="row g-3">
                        <div class="col-md-3">
                            <label class="form-label">Data Início:</label>
                            <input type="date" name="start_date" class="form-control" 
                                   value="<?= htmlspecialchars($startDate ?? '') ?>">
                        </div>
                        <div class="col-md-3">
                            <label class="form-label">Data Fim:</label>
                            <input type="date" name="end_date" class="form-control" 
                                   value="<?= htmlspecialchars($endDate ?? '') ?>">
                        </div>
                        <div class="col-md-4">
                            <label class="form-label">Produto:</label>
                            <input type="text" name="produto" class="form-control" 
                                   placeholder="Filtrar por nome do produto" value="<?= htmlspecialchars($produtoFiltro ?? '') ?>">
                        </div>
                        <div class="col-md-2 d-flex align-items-end">
                            <button type="submit" class="btn btn-primary w-100">Filtrar</button>
                        </div>
                    </form>
                </div>

                <?php if (!empty($labels)): ?>
                    <div class="card">
                        <div class="card-header">
                            <h5 class="card-title">Resultados</h5>
                        </div>
                        <div class="card-body">
                            <div class="chart-container">
                                <canvas id="grafico"></canvas>
                            </div>
                        </div>
                    </div>

                    <div class="table-responsive mt-4">
                        <table class="table table-striped">
                            <thead>
                                <tr>
                                    <th>Cliente - Produto</th>
                                    <th>Quantidade</th>
                                    <th>Valor Total</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php for ($i = 0; $i < count($labels); $i++): ?>
                                    <tr>
                                        <td><?= htmlspecialchars($labels[$i]) ?></td>
                                        <td><?= number_format($quantidades[$i], 0, ',', '.') ?></td>
                                        <td>R$ <?= number_format($valores[$i], 2, ',', '.') ?></td>
                                    </tr>
                                <?php endfor; ?>
                            </tbody>
                        </table>
                    </div>
                <?php elseif (!isset($error_message)): ?>
                    <div class="alert alert-info">Nenhum dado encontrado para os filtros informados.</div>
                <?php endif; ?>
            </div>
        </div>
    </div>

    <?php if (!empty($labels)): ?>
    <script>
        document.addEventListener('DOMContentLoaded', function() {
            const ctx = document.getElementById('grafico').getContext('2d');
            new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: <?= json_encode($labels) ?>,
                    datasets: [
                        {
                            label: 'Quantidade',
                            data: <?= json_encode($quantidades) ?>,
                            backgroundColor: 'rgba(54, 162, 235, 0.7)',
                            borderColor: 'rgba(54, 162, 235, 1)',
                            borderWidth: 1,
                            yAxisID: 'y'
                        },
                        {
                            label: 'Valor Total (R$)',
                            data: <?= json_encode($valores) ?>,
                            backgroundColor: 'rgba(255, 99, 132, 0.7)',
                            borderColor: 'rgba(255, 99, 132, 1)',
                            borderWidth: 1,
                            yAxisID: 'y1',
                            type: 'line'
                        }
                    ]
                },
                options: {
                    responsive: true,
                    maintainAspectRatio: false,
                    scales: {
                        y: {
                            type: 'linear',
                            display: true,
                            position: 'left',
                            title: {
                                display: true,
                                text: 'Quantidade'
                            },
                            beginAtZero: true
                        },
                        y1: {
                            type: 'linear',
                            display: true,
                            position: 'right',
                            title: {
                                display: true,
                                text: 'Valor (R$)'
                            },
                            beginAtZero: true,
                            grid: {
                                drawOnChartArea: false
                            }
                        },
                        x: {
                            ticks: {
                                autoSkip: false,
                                maxRotation: 45,
                                minRotation: 45
                            }
                        }
                    },
                    plugins: {
                        tooltip: {
                            callbacks: {
                                label: function(context) {
                                    let label = context.dataset.label || '';
                                    if (label) {
                                        label += ': ';
                                    }
                                    if (context.datasetIndex === 1) {
                                        label += 'R$ ' + context.raw.toLocaleString('pt-BR', {minimumFractionDigits: 2});
                                    } else {
                                        label += context.raw.toLocaleString('pt-BR');
                                    }
                                    return label;
                                }
                            }
                        }
                    }
                }
            });
        });
    </script>
    <?php endif; ?>
</body>
</html>