<?php
/**
 * TechShop Perú - Dashboard Admin con métricas, gráficas y KPIs
 */
define('SECURE_ACCESS', true);
require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/database.php';
require_once __DIR__ . '/../includes/functions.php';

require_admin();
$db = db();

// ── Estadísticas generales ──────────────────────────────
try {
    $usuarios  = (int)$db->query('SELECT COUNT(*) FROM usuarios WHERE rol="cliente"')->fetchColumn();
    $productos = (int)$db->query('SELECT COUNT(*) FROM productos WHERE activo=1')->fetchColumn();
    $pedidos   = (int)$db->query('SELECT COUNT(*) FROM pedidos')->fetchColumn();
    $ventas    = (float)$db->query('SELECT COALESCE(SUM(total),0) FROM pedidos WHERE estado != "cancelado"')->fetchColumn();
} catch (PDOException $e) {
    $usuarios = $productos = $pedidos = 0;
    $ventas = 0.0;
}

// ── Cambios vs mes anterior ─────────────────────────────
$mes_act = date('Y-m');
$mes_ant = date('Y-m', strtotime('-1 month'));
try {
    $stmt = $db->prepare('SELECT COUNT(*) FROM pedidos WHERE DATE_FORMAT(fecha_pedido,"%Y-%m")=?');
    $stmt->execute([$mes_act]); $ped_mes = (int)$stmt->fetchColumn();
    $stmt->execute([$mes_ant]); $ped_ant = (int)$stmt->fetchColumn();
    $cambio_pedidos = $ped_ant > 0 ? round((($ped_mes - $ped_ant) / $ped_ant) * 100) : 0;

    $stmt = $db->prepare('SELECT COUNT(*) FROM usuarios WHERE DATE_FORMAT(fecha_registro,"%Y-%m")=?');
    $stmt->execute([$mes_act]); $usr_mes = (int)$stmt->fetchColumn();
    $stmt->execute([$mes_ant]); $usr_ant = (int)$stmt->fetchColumn();
    $cambio_usuarios = $usr_ant > 0 ? round((($usr_mes - $usr_ant) / $usr_ant) * 100) : 0;
} catch (PDOException $e) {
    $ped_mes = $ped_ant = $usr_mes = $usr_ant = 0;
    $cambio_pedidos = $cambio_usuarios = 0;
}

// ── Pedidos por estado ──────────────────────────────────
$estados_labels = $estados_data = $estados_colors = [];
try {
    $estados_rows = $db->query('SELECT estado, COUNT(*) as total FROM pedidos GROUP BY estado')->fetchAll();
    $estado_colors_map = [
        'pendiente'  => '#f59e0b', 'confirmado' => '#3b82f6', 'en_proceso' => '#8b5cf6',
        'enviado'    => '#06b6d4', 'entregado'  => '#10b981', 'cancelado'  => '#ef4444',
        'pagado'     => '#22c55e',
    ];
    foreach ($estados_rows as $r) {
        $estados_labels[] = ucfirst(str_replace('_', ' ', $r['estado']));
        $estados_data[]   = (int)$r['total'];
        $estados_colors[] = $estado_colors_map[$r['estado']] ?? '#94a3b8';
    }
} catch (PDOException $e) { /* sin pedidos aún */ }

// ── Ventas últimos 6 meses ──────────────────────────────
$ventas_labels = $ventas_vals = [];
try {
    $stmt_v = $db->prepare('SELECT COALESCE(SUM(total),0) FROM pedidos WHERE DATE_FORMAT(fecha_pedido,"%Y-%m")=? AND estado != "cancelado"');
    for ($i = 5; $i >= 0; $i--) {
        $m = date('Y-m', strtotime("-$i months"));
        $stmt_v->execute([$m]);
        $ventas_labels[] = date('M y', strtotime("-$i months"));
        $ventas_vals[]   = round((float)$stmt_v->fetchColumn(), 2);
    }
} catch (PDOException $e) { $ventas_labels = $ventas_vals = []; }

// ── Top 5 productos más vendidos ────────────────────────
try {
    $top_productos = $db->query('
        SELECT p.nombre, SUM(dp.cantidad) AS total_vendido
        FROM detalles_pedido dp
        JOIN productos p ON dp.producto_id = p.id
        GROUP BY dp.producto_id, p.nombre
        ORDER BY total_vendido DESC
        LIMIT 5
    ')->fetchAll();
} catch (PDOException $e) { $top_productos = []; }

// ── Stock bajo ──────────────────────────────────────────
try {
    $stock_bajo = $db->query('SELECT id, nombre, stock FROM productos WHERE activo=1 AND stock <= 5 ORDER BY stock ASC LIMIT 10')->fetchAll();
} catch (PDOException $e) { $stock_bajo = []; }

// ── Tickets pendientes ──────────────────────────────────
try {
    $tickets_abiertos = (int)$db->query('SELECT COUNT(*) FROM tickets_soporte WHERE estado IN ("abierto","en_revision")')->fetchColumn();
} catch (Exception $e) { $tickets_abiertos = 0; }

// ── Últimos 8 pedidos ───────────────────────────────────
try {
    $ultimos_pedidos = $db->query('
        SELECT p.id, p.numero_pedido, p.total, p.estado, p.fecha_pedido,
               u.nombres, u.apellidos
        FROM pedidos p
        JOIN usuarios u ON p.usuario_id = u.id
        ORDER BY p.fecha_pedido DESC
        LIMIT 8
    ')->fetchAll();
} catch (PDOException $e) { $ultimos_pedidos = []; }

$page_title = 'Dashboard de Control';
require_once __DIR__ . '/views/layout.php';
?>

<!-- ═══ KPI CARDS ═══════════════════════════════════════════ -->
<div class="row g-3 mb-4">
  <?php
  $kpis = [
    ['Ventas Totales',       format_precio($ventas), 'cash-stack',   'success', null,            'Pedidos no cancelados'],
    ['Pedidos este Mes',     $ped_mes,               'bag-check',    'primary', $cambio_pedidos, 'vs mes anterior'],
    ['Usuarios Nuevos/Mes',  $usr_mes,               'people-fill',  'info',    $cambio_usuarios,'vs mes anterior'],
    ['Tickets Pendientes',   $tickets_abiertos,      'headset',      $tickets_abiertos > 0 ? 'danger' : 'secondary', null, 'Sin responder'],
  ];
  foreach ($kpis as [$label, $val, $icon, $color, $cambio, $sub]):
  ?>
  <div class="col-6 col-xl-3">
    <div class="admin-stat-card h-100">
      <div class="d-flex justify-content-between align-items-start mb-2">
        <div>
          <p class="text-muted small mb-1 fw-medium"><?= $label ?></p>
          <h3 class="stat-value mb-0"><?= $val ?></h3>
        </div>
        <div class="stat-icon stat-<?= $color ?>">
          <i class="bi bi-<?= $icon ?>"></i>
        </div>
      </div>
      <div class="d-flex align-items-center gap-2">
        <?php if ($cambio !== null): ?>
          <span class="badge bg-<?= $cambio >= 0 ? 'success' : 'danger' ?>-subtle text-<?= $cambio >= 0 ? 'success' : 'danger' ?> border border-<?= $cambio >= 0 ? 'success' : 'danger' ?>">
            <i class="bi bi-arrow-<?= $cambio >= 0 ? 'up' : 'down' ?>"></i> <?= abs($cambio) ?>%
          </span>
        <?php endif; ?>
        <small class="text-muted"><?= $sub ?></small>
      </div>
    </div>
  </div>
  <?php endforeach; ?>
</div>

<!-- ═══ GRÁFICAS PRINCIPALES ════════════════════════════════ -->
<div class="row g-4 mb-4">
  <!-- Ventas por mes -->
  <div class="col-lg-8">
    <div class="card h-100">
      <div class="card-header d-flex justify-content-between align-items-center">
        <div>
          <h6 class="fw-bold mb-0">Ventas Últimos 6 Meses</h6>
          <small class="text-muted">Ingresos en Soles (S/)</small>
        </div>
        <span class="badge bg-primary-subtle text-primary border border-primary-subtle">Chart</span>
      </div>
      <div class="card-body px-4 pb-4">
        <canvas id="chartVentas" height="100"></canvas>
      </div>
    </div>
  </div>

  <!-- Pedidos por estado -->
  <div class="col-lg-4">
    <div class="card h-100">
      <div class="card-header">
        <h6 class="fw-bold mb-0">Pedidos por Estado</h6>
        <small class="text-muted">Distribución actual</small>
      </div>
      <div class="card-body d-flex align-items-center justify-content-center">
        <?php if (empty($estados_data)): ?>
          <p class="text-muted text-center">Sin pedidos aún</p>
        <?php else: ?>
          <canvas id="chartEstados" style="max-height:250px;"></canvas>
        <?php endif; ?>
      </div>
    </div>
  </div>
</div>

<!-- ═══ TOP PRODUCTOS + STOCK BAJO ══════════════════════════ -->
<div class="row g-4 mb-4">
  <!-- Top 5 productos vendidos -->
  <div class="col-lg-6">
    <div class="card h-100">
      <div class="card-header">
        <h6 class="fw-bold mb-0"><i class="bi bi-trophy text-warning me-2"></i>Top 5 Más Vendidos</h6>
      </div>
      <div class="card-body px-4 pb-4">
        <?php if (empty($top_productos)): ?>
          <p class="text-muted">Aún no hay ventas registradas.</p>
        <?php else: ?>
          <canvas id="chartTopProductos" height="160"></canvas>
        <?php endif; ?>
      </div>
    </div>
  </div>

  <!-- Stock bajo -->
  <div class="col-lg-6">
    <div class="card h-100">
      <div class="card-header d-flex justify-content-between align-items-center">
        <div>
          <h6 class="fw-bold mb-0"><i class="bi bi-exclamation-triangle text-warning me-2"></i>Stock Bajo (≤ 5 uds)</h6>
          <small class="text-muted">Requieren reposición urgente</small>
        </div>
        <a href="<?= url('panel-admin-tech/productos.php') ?>" class="btn btn-sm btn-outline-warning">Gestionar</a>
      </div>
      <div class="card-body p-0">
        <?php if (empty($stock_bajo)): ?>
          <div class="p-4 text-center text-success">
            <i class="bi bi-check-circle-fill fs-1 d-block mb-2"></i>
            <p class="mb-0">¡Todo el stock está bien!</p>
          </div>
        <?php else: ?>
          <div class="table-responsive">
            <table class="table table-hover mb-0 small">
              <thead class="table-light"><tr><th class="px-4">Producto</th><th class="text-center">Stock</th><th></th></tr></thead>
              <tbody>
                <?php foreach ($stock_bajo as $s): ?>
                <tr>
                  <td class="px-4 fw-medium"><?= e(mb_substr($s['nombre'], 0, 40)) ?><?= strlen($s['nombre']) > 40 ? '…' : '' ?></td>
                  <td class="text-center">
                    <span class="badge bg-<?= $s['stock'] == 0 ? 'danger' : 'warning text-dark' ?>"><?= (int)$s['stock'] ?> uds</span>
                  </td>
                  <td><a href="<?= url('panel-admin-tech/productos.php?edit='.$s['id']) ?>" class="btn btn-xs btn-outline-primary btn-sm py-0 px-2">Editar</a></td>
                </tr>
                <?php endforeach; ?>
              </tbody>
            </table>
          </div>
        <?php endif; ?>
      </div>
    </div>
  </div>
</div>

<!-- ═══ ÚLTIMOS PEDIDOS ══════════════════════════════════════ -->
<div class="card">
  <div class="card-header d-flex justify-content-between align-items-center">
    <h6 class="fw-bold mb-0"><i class="bi bi-clock-history me-2 text-primary"></i>Últimos Pedidos</h6>
    <a href="<?= url('panel-admin-tech/pedidos.php') ?>" class="btn btn-sm btn-primary">Ver todos</a>
  </div>
  <div class="card-body p-0">
    <div class="table-responsive">
      <table class="table table-hover align-middle mb-0">
        <thead class="table-light">
          <tr><th class="px-4">N° Pedido</th><th>Cliente</th><th>Total</th><th>Estado</th><th>Fecha</th><th></th></tr>
        </thead>
        <tbody>
          <?php if (empty($ultimos_pedidos)): ?>
            <tr><td colspan="6" class="text-center py-4 text-muted">No hay pedidos aún.</td></tr>
          <?php endif; ?>
          <?php foreach ($ultimos_pedidos as $ped):
            $ec = ['pendiente'=>'warning','confirmado'=>'info','en_proceso'=>'primary','enviado'=>'info','entregado'=>'success','cancelado'=>'danger'];
          ?>
          <tr>
            <td class="px-4"><code class="text-primary"><?= e($ped['numero_pedido']) ?></code></td>
            <td class="fw-medium"><?= e($ped['nombres'].' '.$ped['apellidos']) ?></td>
            <td class="fw-bold text-success"><?= format_precio((float)$ped['total']) ?></td>
            <td><span class="badge bg-<?= $ec[$ped['estado']] ?? 'secondary' ?>"><?= ucfirst(str_replace('_',' ',$ped['estado'])) ?></span></td>
            <td><small class="text-muted"><?= date('d/m/Y', strtotime($ped['fecha_pedido'])) ?></small></td>
            <td><a href="<?= url('panel-admin-tech/pedidos.php') ?>" class="btn btn-sm btn-outline-primary">Ver</a></td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
  </div>
</div>

<!-- Chart.js -->
<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.3/dist/chart.umd.min.js"></script>
<script>
Chart.defaults.font.family = 'system-ui, -apple-system, sans-serif';
Chart.defaults.color = '#64748b';

// ── Ventas por mes ────────────────────────────
new Chart(document.getElementById('chartVentas'), {
  type: 'bar',
  data: {
    labels: <?= json_encode($ventas_labels) ?>,
    datasets: [{
      label: 'Ventas (S/)',
      data: <?= json_encode($ventas_vals) ?>,
      backgroundColor: 'rgba(37,99,235,0.15)',
      borderColor: '#2563eb',
      borderWidth: 2,
      borderRadius: 8,
      tension: 0.4,
      fill: true,
    }]
  },
  options: {
    responsive: true,
    plugins: { legend: { display: false } },
    scales: {
      y: { beginAtZero: true, grid: { color: '#f1f5f9' }, ticks: { callback: v => 'S/ '+v.toLocaleString() } },
      x: { grid: { display: false } }
    }
  }
});

<?php if (!empty($estados_data)): ?>
// ── Pedidos por estado ────────────────────────
new Chart(document.getElementById('chartEstados'), {
  type: 'doughnut',
  data: {
    labels: <?= json_encode($estados_labels) ?>,
    datasets: [{
      data: <?= json_encode($estados_data) ?>,
      backgroundColor: <?= json_encode($estados_colors) ?>,
      borderWidth: 2,
      borderColor: '#fff',
      hoverOffset: 8,
    }]
  },
  options: {
    responsive: true,
    plugins: { legend: { position: 'bottom', labels: { padding: 12, usePointStyle: true } } },
    cutout: '65%'
  }
});
<?php endif; ?>

<?php if (!empty($top_productos)): ?>
// ── Top productos ─────────────────────────────
new Chart(document.getElementById('chartTopProductos'), {
  type: 'bar',
  data: {
    labels: <?= json_encode(array_map(fn($p) => mb_substr($p['nombre'],0,25), $top_productos)) ?>,
    datasets: [{
      label: 'Unidades Vendidas',
      data: <?= json_encode(array_map(fn($p) => (int)$p['total_vendido'], $top_productos)) ?>,
      backgroundColor: ['#2563eb','#0284c7','#6366f1','#10b981','#f59e0b'],
      borderRadius: 6,
    }]
  },
  options: {
    indexAxis: 'y',
    responsive: true,
    plugins: { legend: { display: false } },
    scales: {
      x: { beginAtZero: true, grid: { color: '#f1f5f9' } },
      y: { grid: { display: false } }
    }
  }
});
<?php endif; ?>
</script>
