<?php
/* indicadores.php */
require_once($r."inc/funciones.php");
$conn = connectDB($r);
$conn->set_charset("utf8");

/* ===== FILTROS ===== */
$fi1 = $_GET['fi1'] ?? date("Y-m-01");
$ff1 = $_GET['ff1'] ?? date("Y-m-d");

$fi2 = $_GET['fi2'] ?? '';
$ff2 = $_GET['ff2'] ?? '';

$idcliente = $_GET['cliente'] ?? '';
$iduser    = $_GET['vendedor'] ?? '';
$pago      = $_GET['pago'] ?? '';
$productos_sel = $_GET['producto'] ?? [];

$inProductos='';
if(!empty($productos_sel)){
    $ids=array_map('intval',$productos_sel);
    $inProductos=" AND d.idproducto IN (".implode(',',$ids).") ";
}

function filtro($fi,$ff,$idcliente,$iduser,$pago,$inProductos){
    $f=" WHERE p.fecha BETWEEN '$fi' AND '$ff' ";
    if($idcliente!='') $f.=" AND p.idcliente='$idcliente'";
    if($iduser!='')    $f.=" AND p.iduser='$iduser'";
    if($pago!='')      $f.=" AND p.pago='$pago'";
    $f.=$inProductos;
    return $f;
}

$f1=filtro($fi1,$ff1,$idcliente,$iduser,$pago,$inProductos);
$f2=($fi2 && $ff2)?filtro($fi2,$ff2,$idcliente,$iduser,$pago,$inProductos):'';

/* ===== KPIs ===== */
$kpi1=$conn->query("
SELECT 
SUM(p.total) total,
COUNT(DISTINCT p.codigopedido) pedidos,
AVG(p.total) ticket,
SUM(CASE WHEN pago=2 THEN total ELSE 0 END) cobrado,
SUM(CASE WHEN pago IN(0,1) THEN total ELSE 0 END) cartera
FROM z_pedidos p
LEFT JOIN z_pedido d ON d.codigopedido=p.codigopedido
$f1
")->fetch_assoc();

$kpi2=['total'=>0,'pedidos'=>0,'ticket'=>0,'cobrado'=>0,'cartera'=>0];
if($f2!=''){
$kpi2=$conn->query("
SELECT 
SUM(p.total) total,
COUNT(DISTINCT p.codigopedido) pedidos,
AVG(p.total) ticket,
SUM(CASE WHEN pago=2 THEN total ELSE 0 END) cobrado,
SUM(CASE WHEN pago IN(0,1) THEN total ELSE 0 END) cartera
FROM z_pedidos p
LEFT JOIN z_pedido d ON d.codigopedido=p.codigopedido
$f2
")->fetch_assoc();
}

/* Ventas por mes */
$ventas_mes=$conn->query("
SELECT DATE_FORMAT(p.fecha,'%Y-%m') mes,SUM(p.total) total
FROM z_pedidos p
LEFT JOIN z_pedido d ON d.codigopedido=p.codigopedido
$f1
GROUP BY mes ORDER BY mes
");

/* Top productos */
$top1=$conn->query("
SELECT pr.producto,SUM(d.cantidad) unidades
FROM z_pedido d
JOIN z_pedidos p ON p.codigopedido=d.codigopedido
JOIN z_productos pr ON pr.id=d.idproducto
$f1
GROUP BY d.idproducto ORDER BY unidades DESC LIMIT 10
");

$top2=null;
if($f2!=''){
$top2=$conn->query("
SELECT pr.producto,SUM(d.cantidad) unidades
FROM z_pedido d
JOIN z_pedidos p ON p.codigopedido=d.codigopedido
JOIN z_productos pr ON pr.id=d.idproducto
$f2
GROUP BY d.idproducto ORDER BY unidades DESC LIMIT 10
");
}

/* Vendedores */
$vendedores=$conn->query("
SELECT u.nombre,SUM(p.total) total
FROM z_pedidos p
JOIN z_usuarios u ON u.id=p.iduser
LEFT JOIN z_pedido d ON d.codigopedido=p.codigopedido
$f1
GROUP BY p.iduser ORDER BY total DESC
");

/* Estado pago */
$estado=$conn->query("
SELECT pago,SUM(total) total
FROM z_pedidos p
LEFT JOIN z_pedido d ON d.codigopedido=p.codigopedido
$f1
GROUP BY pago
");

/* Selects */
$clientes=$conn->query("SELECT id,nombre FROM z_clientes ORDER BY nombre");
$productos=$conn->query("SELECT id,producto FROM z_productos ORDER BY producto");
$vends=$conn->query("SELECT id,nombre FROM z_usuarios WHERE estado=1 ORDER BY nombre");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Dashboard</title>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css">
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

</head>
<body>

<div class="container mt-4">

<form class="card p-3 mb-3">
<div class="row g-2">

<div class="col-md-2"><label>Desde 1</label><input type="date" name="fi1" class="form-control" value="<?=$fi1?>"></div>
<div class="col-md-2"><label>Hasta 1</label><input type="date" name="ff1" class="form-control" value="<?=$ff1?>"></div>

<div class="col-md-2"><label>Desde 2</label><input type="date" name="fi2" class="form-control" value="<?=$fi2?>"></div>
<div class="col-md-2"><label>Hasta 2</label><input type="date" name="ff2" class="form-control" value="<?=$ff2?>"></div>

<div class="col-md-2">
<label>Cliente</label>
<select name="cliente" class="form-select">
<option value="">Todos</option>
<?php while($c=$clientes->fetch_assoc()){ ?>
<option value="<?=$c['id']?>" <?=($idcliente==$c['id'])?'selected':''?>><?=$c['nombre']?></option>
<?php } ?>
</select>
</div>

<div class="col-md-2">
<label>Vendedor</label>
<select name="vendedor" class="form-select">
<option value="">Todos</option>
<?php while($v=$vends->fetch_assoc()){ ?>
<option value="<?=$v['id']?>" <?=($iduser==$v['id'])?'selected':''?>><?=$v['nombre']?></option>
<?php } ?>
</select>
</div>

<div class="col-md-4">
<label>Productos (multiple)</label>
<select name="producto[]" multiple class="form-select" size="6">
<?php while($p=$productos->fetch_assoc()){ ?>
<option value="<?=$p['id']?>" <?=in_array($p['id'],$productos_sel)?'selected':''?>><?=$p['producto']?></option>
<?php } ?>
</select>
</div>

<div class="col-md-2">
<label>Pago</label>
<select name="pago" class="form-select">
<option value="">Todos</option>
<option value="0" <?=$pago=='0'?'selected':''?>>Por cobrar</option>
<option value="1" <?=$pago=='1'?'selected':''?>>Crédito</option>
<option value="2" <?=$pago=='2'?'selected':''?>>Pagado</option>
</select>
</div>

<div class="col-md-2 d-flex align-items-end">
<button class="btn btn-primary w-100">Aplicar</button>
</div>

</div>
</form>

<div class="row text-center">
<div class="col"><div class="card p-2">Ventas P1<br><b>$<?=number_format($kpi1['total'])?></b></div></div>
<div class="col"><div class="card p-2">Pedidos P1<br><b><?=$kpi1['pedidos']?></b></div></div>
<div class="col"><div class="card p-2">Ventas P2<br><b>$<?=number_format($kpi2['total'])?></b></div></div>
<div class="col"><div class="card p-2">Pedidos P2<br><b><?=$kpi2['pedidos']?></b></div></div>
</div>

<div class="row mt-4">
<div class="col-md-6"><canvas id="ventasMes"></canvas></div>
<div class="col-md-6"><canvas id="estadoPago"></canvas></div>
</div>

<div class="row mt-4">
<div class="col-md-6"><canvas id="top1"></canvas></div>
<div class="col-md-6"><canvas id="top2"></canvas></div>
</div>

<div class="row mt-4">
<div class="col-md-12"><canvas id="vendedores"></canvas></div>
</div>

</div>

<script>
new Chart(document.getElementById('ventasMes'),{
type:'line',
data:{labels:[<?php while($m=$ventas_mes->fetch_assoc()){echo "'".$m['mes']."',";} ?>],
datasets:[{label:'Ventas',data:[<?php $ventas_mes->data_seek(0); while($m=$ventas_mes->fetch_assoc()){echo $m['total'].",";} ?>]}]}
});

new Chart(document.getElementById('top1'),{
type:'bar',
data:{labels:[<?php while($t=$top1->fetch_assoc()){echo "'".$t['producto']."',";} ?>],
datasets:[{label:'Periodo 1',data:[<?php $top1->data_seek(0); while($t=$top1->fetch_assoc()){echo $t['unidades'].",";} ?>]}]}
});

<?php if($top2){ ?>
new Chart(document.getElementById('top2'),{
type:'bar',
data:{labels:[<?php while($t=$top2->fetch_assoc()){echo "'".$t['producto']."',";} ?>],
datasets:[{label:'Periodo 2',data:[<?php $top2->data_seek(0); while($t=$top2->fetch_assoc()){echo $t['unidades'].",";} ?>]}]}
});
<?php } ?>

new Chart(document.getElementById('vendedores'),{
type:'bar',
data:{labels:[<?php while($v=$vendedores->fetch_assoc()){echo "'".$v['nombre']."',";} ?>],
datasets:[{label:'Ventas',data:[<?php $vendedores->data_seek(0); while($v=$vendedores->fetch_assoc()){echo $v['total'].",";} ?>]}]}
});

new Chart(document.getElementById('estadoPago'),{
type:'pie',
data:{labels:['Por cobrar','Crédito','Pagado'],
datasets:[{data:[
<?php 
$tot=[0,0,0];
while($e=$estado->fetch_assoc()){$tot[$e['pago']]=$e['total'];}
echo $tot[0].",".$tot[1].",".$tot[2];
?>]}]}
});
</script>

</body>
</html>