<?php
require_once __DIR__.'/../../config/auth.php';
$tipo=$_GET['tipo']??'resumen';$estado=$_GET['estado']??'todos';$cliente=(int)($_GET['cliente_id']??0);$detallePagos=($_GET['detalle_pagos']??'si')==='si';
$esExtractoDirecto=basename($_SERVER['SCRIPT_NAME']??'')==='extracto_cliente.php';
$where=$cliente?" WHERE f.cliente_id=$cliente":' WHERE 1=1';
$having=$estado==='pendientes'?' HAVING saldo>0':($estado==='pagadas'?' HAVING saldo<=0':'');
$clientes=$conn->query('SELECT id,nombre FROM clientes ORDER BY nombre');
$res=$conn->query("SELECT f.id,c.nombre cliente,COALESCE(f.fecha_factura,DATE(f.creado_en)) fecha,f.nro_factura,f.importe,COALESCE(SUM(p.importe),0) pagado,f.importe-COALESCE(SUM(p.importe),0) saldo FROM facturas f JOIN clientes c ON c.id=f.cliente_id LEFT JOIN factura_pagos p ON p.factura_id=f.id $where GROUP BY f.id $having ORDER BY fecha,f.id");
include __DIR__.'/../../includes/header.php';include __DIR__.'/../../includes/sidebar.php';
?>
<main class="main"><?php include __DIR__.'/../../includes/topbar.php';?><div class="content">
<h3 class="page-title"><?=$tipo==='extracto'?'Extracto Cliente':'Informes de Facturación'?></h3>
<form class="row g-2 mb-3 no-print">
 <?php if($esExtractoDirecto):?><input type="hidden" name="tipo" value="extracto"><div class="col-md-3"><label>Informe</label><input class="form-control" value="Extracto Cliente" readonly></div><?php else:?><div class="col-md-3"><label>Informe</label><select class="form-select" name="tipo" id="tipoInforme"><option value="resumen" <?=$tipo==='resumen'?'selected':''?>>Facturación</option><option value="extracto" <?=$tipo==='extracto'?'selected':''?>>Extracto Cliente</option><option value="movimientos" <?=$tipo==='movimientos'?'selected':''?>>Todos los movimientos</option></select></div><?php endif;?>
 <div class="col-md-3"><label>Cliente</label><select class="form-select" name="cliente_id"><option value="0">Todos los clientes</option><?php while($c=$clientes->fetch_assoc()):?><option value="<?=$c['id']?>" <?=$cliente==$c['id']?'selected':''?>><?=e($c['nombre'])?></option><?php endwhile;?></select></div>
 <div class="col-md-2"><label>Estado</label><select class="form-select" name="estado"><option value="todos">Todos</option><option value="pendientes" <?=$estado==='pendientes'?'selected':''?>>Pendientes</option><option value="pagadas" <?=$estado==='pagadas'?'selected':''?>>Pagadas</option></select></div>
 <div class="col-md-2" id="opcionDetalle"><label>Pagos</label><select class="form-select" name="detalle_pagos"><option value="si" <?=$detallePagos?'selected':''?>>Con detalle</option><option value="no" <?=!$detallePagos?'selected':''?>>Sin detalle</option></select></div>
 <div class="col-md-2 d-flex align-items-end"><button class="btn btn-hm">Filtrar</button></div>
</form>
<script>const ti=document.getElementById('tipoInforme'),od=document.getElementById('opcionDetalle');function verDetalle(){od.style.display=!ti||ti.value==='extracto'?'':'none'}if(ti)ti.addEventListener('change',verDetalle);verDetalle();</script>

<?php if($tipo==='resumen'):?>
<div class="card card-hm"><div class="card-body table-responsive"><table class="table"><thead><tr><th>Cliente</th><th>Fecha</th><th>Nro. factura</th><th class="text-end">Importe</th><th class="text-end">Pagado</th><th class="text-end">Saldo</th></tr></thead><tbody>
<?php $tf=$tc=0;while($f=$res->fetch_assoc()):$tf+=$f['importe'];$tc+=$f['pagado'];?><tr><td><?=e($f['cliente'])?></td><td><?=e($f['fecha'])?></td><td><?=e($f['nro_factura']?:'Sin número')?></td><td class="text-end"><?=numero_py($f['importe'])?></td><td class="text-end"><?=numero_py($f['pagado'])?></td><td class="text-end"><?=numero_py($f['saldo'])?></td></tr><?php endwhile;?>
</tbody><tfoot><tr><th colspan="3" class="text-end">Totales</th><th class="text-end"><?=numero_py($tf)?></th><th class="text-end"><?=numero_py($tc)?></th><th class="text-end"><?=numero_py($tf-$tc)?></th></tr></tfoot></table></div></div>

<?php elseif($tipo==='extracto' && !$detallePagos):?>
<h4>Extracto Cliente — Sin detalle de pagos</h4>
<div class="card card-hm"><div class="card-body table-responsive"><table class="table"><thead><tr><th>Fecha</th><th>Cliente</th><th>Descripción</th><th class="text-end">Monto factura</th><th class="text-end">Monto pagado</th><th class="text-end">Saldo</th></tr></thead><tbody>
<?php $tf=$tp=0;while($f=$res->fetch_assoc()):$tf+=$f['importe'];$tp+=$f['pagado'];?><tr><td><?=e($f['fecha'])?></td><td><?=e($f['cliente'])?></td><td>Factura <?=e($f['nro_factura']?:'sin número')?></td><td class="text-end"><?=numero_py($f['importe'])?></td><td class="text-end"><?=numero_py($f['pagado'])?></td><td class="text-end"><?=numero_py($f['saldo'])?></td></tr><?php endwhile;?>
</tbody><tfoot><tr><th colspan="3" class="text-end">Totales</th><th class="text-end"><?=numero_py($tf)?></th><th class="text-end"><?=numero_py($tp)?></th><th class="text-end"><?=numero_py($tf-$tp)?></th></tr></tfoot></table></div></div>

<?php elseif($tipo==='extracto'):
$estadoSql=$estado==='pendientes'?" AND f.importe>(SELECT COALESCE(SUM(px.importe),0) FROM factura_pagos px WHERE px.factura_id=f.id)":($estado==='pagadas'?" AND f.importe<=(SELECT COALESCE(SUM(px.importe),0) FROM factura_pagos px WHERE px.factura_id=f.id)":'');
$ext=$conn->query("SELECT c.nombre cliente,f.id factura_id,COALESCE(f.fecha_factura,DATE(f.creado_en)) fecha,CONCAT('Factura ',COALESCE(f.nro_factura,'sin número')) descripcion,f.importe monto_factura,0 monto_pagado,0 orden FROM facturas f JOIN clientes c ON c.id=f.cliente_id $where $estadoSql UNION ALL SELECT c.nombre,p.factura_id,p.fecha_pago,CONCAT('Pago de factura ',COALESCE(f.nro_factura,'sin número'),IF(p.observacion IS NULL OR p.observacion='','',CONCAT(' - ',p.observacion))),0,p.importe,1 FROM factura_pagos p JOIN facturas f ON f.id=p.factura_id JOIN clientes c ON c.id=f.cliente_id ".($cliente?" WHERE f.cliente_id=$cliente":' WHERE 1=1')."$estadoSql ORDER BY cliente,fecha,factura_id,orden");?>
<h4>Extracto Cliente — Detalle cronológico de pagos</h4>
<div class="card card-hm"><div class="card-body table-responsive"><table class="table"><thead><tr><th>Fecha</th><th>Cliente</th><th>Descripción</th><th class="text-end">Monto factura</th><th class="text-end">Monto pagado</th></tr></thead><tbody>
<?php $tf=$tp=0;while($x=$ext->fetch_assoc()):$tf+=$x['monto_factura'];$tp+=$x['monto_pagado'];?><tr><td><?=e($x['fecha'])?></td><td><?=e($x['cliente'])?></td><td><?=e($x['descripcion'])?></td><td class="text-end"><?=$x['monto_factura']?numero_py($x['monto_factura']):''?></td><td class="text-end"><?=$x['monto_pagado']?numero_py($x['monto_pagado']):''?></td></tr><?php endwhile;?>
</tbody><tfoot><tr><th colspan="3" class="text-end">Totales</th><th class="text-end"><?=numero_py($tf)?></th><th class="text-end"><?=numero_py($tp)?></th></tr><tr><th colspan="4" class="text-end">Saldo</th><th class="text-end"><?=numero_py($tf-$tp)?></th></tr></tfoot></table></div></div>

<?php else:
$mov=$conn->query("SELECT c.nombre cliente,COALESCE(f.fecha_factura,DATE(f.creado_en)) fecha,'FACTURACIÓN' tipo,CONCAT('Factura ',COALESCE(f.nro_factura,'sin número')) detalle,f.importe facturado,0 cobrado FROM facturas f JOIN clientes c ON c.id=f.cliente_id $where UNION ALL SELECT c.nombre,p.fecha_pago,'COBRO',CONCAT('Pago factura ',COALESCE(f.nro_factura,'sin número'),' - ',COALESCE(p.observacion,'')),0,p.importe FROM factura_pagos p JOIN facturas f ON f.id=p.factura_id JOIN clientes c ON c.id=f.cliente_id ".($cliente?" WHERE f.cliente_id=$cliente":'')." ORDER BY fecha");?>
<div class="card card-hm"><div class="card-body table-responsive"><table class="table"><thead><tr><th>Fecha</th><th>Cliente</th><th>Tipo</th><th>Detalle</th><th class="text-end">Facturado</th><th class="text-end">Cobrado</th></tr></thead><tbody>
<?php $tf=$tc=0;while($m=$mov->fetch_assoc()):$tf+=$m['facturado'];$tc+=$m['cobrado'];?><tr><td><?=e($m['fecha'])?></td><td><?=e($m['cliente'])?></td><td><?=e($m['tipo'])?></td><td><?=e($m['detalle'])?></td><td class="text-end"><?=numero_py($m['facturado'])?></td><td class="text-end"><?=numero_py($m['cobrado'])?></td></tr><?php endwhile;?>
</tbody><tfoot><tr><th colspan="4" class="text-end">Totales</th><th class="text-end"><?=numero_py($tf)?></th><th class="text-end"><?=numero_py($tc)?></th></tr></tfoot></table></div></div>
<?php endif;?></div></main><?php include __DIR__.'/../../includes/footer.php';?>
