<?php
require_once __DIR__.'/../../config/auth.php';require_once __DIR__.'/helpers.php';
$accion=$_GET['accion']??'lista';$id=(int)($_GET['id']??0);$error='';
if($_SERVER['REQUEST_METHOD']==='POST'){
 $tipo=$_POST['tipo']??'obligacion';$oid=(int)($_POST['obligacion_id']??0);
 if($tipo==='pago'){
  $saldo=$conn->query("SELECT monto-COALESCE((SELECT SUM(importe) FROM obligacion_pagos WHERE obligacion_id=$oid),0) saldo FROM obligaciones WHERE id=$oid")->fetch_assoc()['saldo']??0;
  $importe=numero_entero($_POST['importe']??0);$fecha=$_POST['fecha_pago']??'';$obs=limpiar($_POST['observacion']??'');
  if($importe>0&&$importe<=(float)$saldo&&$fecha){$s=$conn->prepare('INSERT INTO obligacion_pagos(obligacion_id,fecha_pago,importe,observacion)VALUES(?,?,?,?)');$s->bind_param('isds',$oid,$fecha,$importe,$obs);$s->execute();header("Location:?accion=ver&id=$oid&pago=1");exit;}$error='El pago debe ser mayor a cero y no superar el saldo.';
 }
 elseif($tipo==='seguimiento'){$detalle=limpiar($_POST['detalle']??'');if($detalle){$s=$conn->prepare('INSERT INTO obligacion_seguimientos(obligacion_id,detalle)VALUES(?,?)');$s->bind_param('is',$oid,$detalle);$s->execute();}header("Location:?accion=ver&id=$oid&seguimiento=1");exit;}
 elseif($tipo==='documento'){
  try{$archivo=guardar_archivo_movimiento('documento','obligaciones');$nombre=basename($_FILES['documento']['name']??'');if($archivo){$s=$conn->prepare('INSERT INTO obligacion_documentos(obligacion_id,nombre_original,archivo)VALUES(?,?,?)');$s->bind_param('iss',$oid,$nombre,$archivo);$s->execute();}header("Location:?accion=ver&id=$oid&documento=1");exit;}catch(Throwable $e){$error=$e->getMessage();$accion='ver';$id=$oid;}
 }
 elseif($tipo==='eliminar'){$s=$conn->prepare('DELETE FROM obligaciones WHERE id=?');$s->bind_param('i',$oid);$s->execute();header('Location:?eliminada=1');exit;}
 else{
  $id=(int)($_POST['id']??0);$proveedor=(int)($_POST['proveedor_id']??0);$fecha=$_POST['fecha_obligacion']??'';$vence=$_POST['fecha_vencimiento']??'';$descripcion=limpiar($_POST['descripcion']??'');$monto=numero_entero($_POST['monto']??0);
  if(!$proveedor||!$fecha||!$vence||!$descripcion||$monto<=0)$error='Complete proveedor, fechas, descripción y un monto mayor a cero.';
  else{$sql=$id?'UPDATE obligaciones SET proveedor_id=?,fecha_obligacion=?,fecha_vencimiento=?,descripcion=?,monto=? WHERE id=?':'INSERT INTO obligaciones(proveedor_id,fecha_obligacion,fecha_vencimiento,descripcion,monto)VALUES(?,?,?,?,?)';$s=$conn->prepare($sql);if($id)$s->bind_param('isssdi',$proveedor,$fecha,$vence,$descripcion,$monto,$id);else$s->bind_param('isssd',$proveedor,$fecha,$vence,$descripcion,$monto);$s->execute();$id=$id?:$s->insert_id;header("Location:?accion=ver&id=$id&guardada=1");exit;}
 }
}
$d=['proveedor_id'=>'','fecha_obligacion'=>date('Y-m-d'),'fecha_vencimiento'=>'','descripcion'=>'','monto'=>0];
if($id){$s=$conn->prepare('SELECT * FROM obligaciones WHERE id=?');$s->bind_param('i',$id);$s->execute();$d=$s->get_result()->fetch_assoc()?:$d;}
$proveedores=$conn->query("SELECT id,nombre FROM proveedores WHERE estado='Activo' ORDER BY nombre");include __DIR__.'/../../includes/header.php';include __DIR__.'/../../includes/sidebar.php';
?>
<main class="main"><?php include __DIR__.'/../../includes/topbar.php';?><div class="content">
<?php if($accion==='lista'):$lista=$conn->query("SELECT o.*,p.nombre proveedor,COALESCE(SUM(op.importe),0) pagado,o.monto-COALESCE(SUM(op.importe),0) saldo FROM obligaciones o JOIN proveedores p ON p.id=o.proveedor_id LEFT JOIN obligacion_pagos op ON op.obligacion_id=o.id GROUP BY o.id ORDER BY o.fecha_vencimiento,o.id");?>
<div class="d-flex justify-content-between"><div><h3 class="page-title">Obligaciones</h3><p class="text-muted">Compromisos con proveedores y sus pagos.</p></div><a class="btn btn-hm align-self-start" href="?accion=nuevo">Nueva obligación</a></div><input id="buscar" class="form-control my-3" placeholder="Buscar"><div class="card card-hm"><div class="card-body table-responsive"><table class="table" id="tabla"><thead><tr><th>Proveedor</th><th>Vencimiento</th><th>Descripción</th><th class="text-end">Monto</th><th class="text-end">Pagado</th><th class="text-end">Saldo</th><th></th></tr></thead><tbody><?php while($x=$lista->fetch_assoc()):?><tr><td><?=e($x['proveedor'])?></td><td><?=e($x['fecha_vencimiento'])?></td><td><?=e($x['descripcion'])?></td><td class="text-end"><?=numero_py($x['monto'])?></td><td class="text-end"><?=numero_py($x['pagado'])?></td><td class="text-end"><?=numero_py($x['saldo'])?></td><td><a class="btn btn-sm btn-outline-primary" href="?accion=ver&id=<?=$x['id']?>">Abrir</a></td></tr><?php endwhile;?></tbody></table></div></div><script>buscar.oninput=()=>document.querySelectorAll('#tabla tbody tr').forEach(x=>x.style.display=x.innerText.toLowerCase().includes(buscar.value.toLowerCase())?'':'none');</script>
<?php elseif($accion==='ver'):
$pagos=$conn->query("SELECT * FROM obligacion_pagos WHERE obligacion_id=$id ORDER BY fecha_pago DESC,id DESC");$segs=$conn->query("SELECT * FROM obligacion_seguimientos WHERE obligacion_id=$id ORDER BY creado_en DESC");$docs=$conn->query("SELECT * FROM obligacion_documentos WHERE obligacion_id=$id ORDER BY creado_en DESC");$pagado=(float)$conn->query("SELECT COALESCE(SUM(importe),0) t FROM obligacion_pagos WHERE obligacion_id=$id")->fetch_assoc()['t'];$saldo=(float)$d['monto']-$pagado;$pn=$conn->query("SELECT nombre FROM proveedores WHERE id=".(int)$d['proveedor_id'])->fetch_assoc()['nombre']??'';?>
<a href="?">← Volver</a><div class="d-flex justify-content-between flex-wrap"><h3 class="page-title my-2">Obligación con <?=e($pn)?></h3><div><a class="btn btn-outline-primary" href="?accion=editar&id=<?=$id?>">Editar</a> <form class="d-inline" method="post" onsubmit="return confirm('¿Eliminar la obligación y todo su historial?')"><input type="hidden" name="tipo" value="eliminar"><input type="hidden" name="obligacion_id" value="<?=$id?>"><button class="btn btn-outline-danger">Eliminar</button></form></div></div>
<?php if($error):?><div class="alert alert-danger"><?=e($error)?></div><?php endif;?><div class="card mb-3"><div class="card-body"><b>Descripción:</b> <?=nl2br(e($d['descripcion']))?><br><b>Fecha:</b> <?=e($d['fecha_obligacion'])?> · <b>Vencimiento:</b> <?=e($d['fecha_vencimiento'])?><br><b>Monto:</b> <?=numero_py($d['monto'])?> · <b>Pagado:</b> <?=numero_py($pagado)?> · <b>Saldo:</b> <?=numero_py($saldo)?></div></div>
<div class="row g-3"><div class="col-lg-6"><div class="card card-hm"><div class="card-body"><h5>Pagos</h5><?php if($saldo>0):?><form method="post"><input type="hidden" name="tipo" value="pago"><input type="hidden" name="obligacion_id" value="<?=$id?>"><input class="form-control mb-2" type="date" name="fecha_pago" required><input class="form-control mb-2 numero-miles text-end" name="importe" value="<?=numero_py($saldo)?>" required><textarea class="form-control mb-2" name="observacion" placeholder="Observación"></textarea><button class="btn btn-hm">Registrar pago</button></form><?php else:?><div class="alert alert-success">Obligación pagada.</div><?php endif;?><hr><table class="table"><tbody><?php while($p=$pagos->fetch_assoc()):?><tr><td><?=e($p['fecha_pago'])?></td><td><?=e($p['observacion'])?></td><td class="text-end"><?=numero_py($p['importe'])?></td></tr><?php endwhile;?></tbody></table></div></div></div>
<div class="col-lg-6"><div class="card card-hm mb-3"><div class="card-body"><h5>Seguimiento</h5><?php while($s=$segs->fetch_assoc()):?><p><small><?=e($s['creado_en'])?></small><br><?=nl2br(e($s['detalle']))?></p><?php endwhile;?><form method="post"><input type="hidden" name="tipo" value="seguimiento"><input type="hidden" name="obligacion_id" value="<?=$id?>"><textarea class="form-control mb-2" name="detalle" required></textarea><button class="btn btn-hm">Agregar seguimiento</button></form></div></div>
<div class="card card-hm"><div class="card-body"><h5>Documentos</h5><?php while($doc=$docs->fetch_assoc()):?><p><a href="<?=e($doc['archivo'])?>" target="_blank" rel="noopener"><?=e($doc['nombre_original'])?></a></p><?php endwhile;?><form method="post" enctype="multipart/form-data"><input type="hidden" name="tipo" value="documento"><input type="hidden" name="obligacion_id" value="<?=$id?>"><input class="form-control mb-2" type="file" name="documento" required><small class="text-muted d-block mb-2">PDF, Office, imágenes o texto. Máximo 10 MB.</small><button class="btn btn-hm">Agregar documento</button></form></div></div></div></div>
<?php else:?><a href="?">← Volver</a><h3 class="page-title my-3"><?=$id?'Editar':'Nueva'?> obligación</h3><?php if($error):?><div class="alert alert-danger"><?=e($error)?></div><?php endif;?><div class="card card-hm"><div class="card-body"><form method="post"><input type="hidden" name="tipo" value="obligacion"><input type="hidden" name="id" value="<?=$id?>"><div class="row g-3"><div class="col-md-6"><label>Proveedor *</label><select class="form-select" name="proveedor_id" required><option value="">Seleccione</option><?php while($p=$proveedores->fetch_assoc()):?><option value="<?=$p['id']?>" <?=$d['proveedor_id']==$p['id']?'selected':''?>><?=e($p['nombre'])?></option><?php endwhile;?></select></div><div class="col-md-3"><label>Fecha *</label><input class="form-control" type="date" name="fecha_obligacion" value="<?=e($d['fecha_obligacion'])?>" required></div><div class="col-md-3"><label>Vencimiento *</label><input class="form-control" type="date" name="fecha_vencimiento" value="<?=e($d['fecha_vencimiento'])?>" required></div><div class="col-12"><label>Descripción *</label><textarea class="form-control" name="descripcion" required><?=e($d['descripcion'])?></textarea></div><div class="col-md-6"><label>Monto *</label><input class="form-control numero-miles text-end" name="monto" value="<?=$d['monto']?numero_py($d['monto']):''?>" required></div></div><button class="btn btn-hm mt-3">Guardar</button></form></div></div><?php endif;?></div></main><?php include __DIR__.'/../../includes/footer.php';?>
