<?php
require_once __DIR__.'/../../config/auth.php';$accion=$_GET['accion']??'lista';$id=(int)($_GET['id']??0);$error='';$estados=['Pendiente','Aprobado','Cobrado','Cancelado','Rechazado'];
if(($_SERVER['REQUEST_METHOD']??'GET')==='POST'){$tipo=$_POST['tipo']??'presupuesto';$id=(int)($_POST['id']??$_POST['presupuesto_id']??0);
 if($tipo==='seguimiento'){$p=$conn->query("SELECT * FROM presupuestos WHERE id=$id")->fetch_assoc();$detalle=limpiar($_POST['detalle']??'');$estado=in_array($_POST['estado']??'',$estados,true)?$_POST['estado']:($p['estado']??'Pendiente');if(!$p||!$detalle)$error='El seguimiento es obligatorio.';else{$uid=(int)$_SESSION['user_id'];$conn->begin_transaction();try{$s=$conn->prepare('INSERT INTO presupuesto_seguimientos(presupuesto_id,detalle,estado,usuario_id) VALUES(?,?,?,?)');$s->bind_param('issi',$id,$detalle,$estado,$uid);$s->execute();$conn->query("UPDATE presupuestos SET estado='".$conn->real_escape_string($estado)."' WHERE id=$id");$conn->commit();header("Location: presupuestos.php?accion=ver&id=$id&seguimiento=1");exit;}catch(Throwable $e){$conn->rollback();$error=$e->getMessage();}}}
 else{$cliente=(int)($_POST['cliente_id']??0);$remision=(int)($_POST['remision_id']??0)?:null;$fecha=limpiar($_POST['fecha']??'');$contacto=limpiar($_POST['contacto']??'');$detalle=limpiar($_POST['detalle']??'');$monto=(float)str_replace(',','.',$_POST['monto']??0);$estado=in_array($_POST['estado']??'',$estados,true)?$_POST['estado']:'Pendiente';if(!$cliente||!$fecha||!$detalle)$error='Cliente, fecha y detalle son obligatorios.';if($remision){$otro=$conn->query("SELECT id FROM presupuestos WHERE remision_id=$remision AND estado NOT IN ('Cancelado','Rechazado') AND id<>$id LIMIT 1")->fetch_assoc();if($otro)$error='La remisión ya está vinculada a otro presupuesto vigente.';}if(!$error){$uid=(int)$_SESSION['user_id'];if($id){$s=$conn->prepare('UPDATE presupuestos SET cliente_id=?,remision_id=?,fecha=?,contacto=?,detalle=?,monto=?,estado=? WHERE id=?');$s->bind_param('iisssdsi',$cliente,$remision,$fecha,$contacto,$detalle,$monto,$estado,$id);}else{$s=$conn->prepare('INSERT INTO presupuestos(cliente_id,remision_id,fecha,contacto,detalle,monto,estado,usuario_id) VALUES(?,?,?,?,?,?,?,?)');$s->bind_param('iisssdsi',$cliente,$remision,$fecha,$contacto,$detalle,$monto,$estado,$uid);}$s->execute();$id=$id?:$s->insert_id;if(empty($_POST['id'])){$numero='PRE-'.date('Y',strtotime($fecha)).'-'.str_pad((string)$id,6,'0',STR_PAD_LEFT);$conn->query("UPDATE presupuestos SET numero='".$conn->real_escape_string($numero)."' WHERE id=$id");}registrar_auditoria($conn,empty($_POST['id'])?'INSERT':'UPDATE','presupuestos',$id,'Presupuesto');header("Location: presupuestos.php?accion=ver&id=$id&guardado=1");exit;}}
}
$clientes=$conn->query("SELECT id,nombre FROM clientes WHERE estado='Activo' ORDER BY nombre");$remisiones=$conn->query("SELECT r.id,r.numero_servicio,c.nombre cliente FROM remisiones r JOIN clientes c ON c.id=r.cliente_id WHERE r.estado<>'Cancelada' ORDER BY r.fecha DESC,r.id DESC");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 p.*,c.nombre cliente,r.numero_servicio FROM presupuestos p JOIN clientes c ON c.id=p.cliente_id LEFT JOIN remisiones r ON r.id=p.remision_id ORDER BY p.fecha DESC,p.id DESC");?><div class="d-flex justify-content-between"><div><h3 class="page-title">Presupuestos</h3><p class="text-muted">Cotizaciones, aprobaciones, cobros y seguimiento.</p></div><a class="btn btn-hm align-self-start" href="?accion=nuevo"><i class="fa fa-plus"></i> Nuevo presupuesto</a></div><div class="card card-hm"><div class="card-body table-responsive"><table class="table table-hover"><thead><tr><th>Número</th><th>Fecha</th><th>Cliente</th><th>Remisión</th><th>Monto</th><th>Estado</th><th></th></tr></thead><tbody><?php while($p=$lista->fetch_assoc()):?><tr><td><?=e($p['numero'])?></td><td><?=e(date('d/m/Y',strtotime($p['fecha'])))?></td><td><?=e($p['cliente'])?></td><td><?=e($p['numero_servicio']?:'—')?></td><td><?=numero_py($p['monto'])?></td><td><?=e($p['estado'])?></td><td><a class="btn btn-sm btn-outline-primary" href="?accion=ver&id=<?=$p['id']?>">Abrir</a></td></tr><?php endwhile;?></tbody></table></div></div>
<?php elseif($accion==='ver'):$p=$conn->query("SELECT p.*,c.nombre cliente,r.numero_servicio,COALESCE(u.nombre,u.usuario,'—') cargado_por FROM presupuestos p JOIN clientes c ON c.id=p.cliente_id LEFT JOIN remisiones r ON r.id=p.remision_id LEFT JOIN usuarios u ON u.id=p.usuario_id WHERE p.id=$id")->fetch_assoc();if(!$p){http_response_code(404);exit('Presupuesto no encontrado.');}$segs=$conn->query("SELECT s.*,COALESCE(u.nombre,u.usuario,'—') usuario FROM presupuesto_seguimientos s LEFT JOIN usuarios u ON u.id=s.usuario_id WHERE s.presupuesto_id=$id ORDER BY s.creado_en DESC,s.id DESC");?><div class="d-flex justify-content-between"><div><a href="presupuestos.php">← Volver</a><h3 class="page-title"><?=e($p['numero'])?></h3></div><div><a class="btn btn-outline-primary" href="?accion=editar&id=<?=$id?>"><i class="fa fa-pen"></i> Editar</a> <a class="btn btn-hm" target="_blank" href="presupuesto_imprimir.php?id=<?=$id?>"><i class="fa fa-print"></i> Imprimir</a></div></div><div class="card card-hm mb-3"><div class="card-body"><div class="row g-3"><div class="col-md-4"><b>Cliente:</b> <?=e($p['cliente'])?></div><div class="col-md-4"><b>Fecha:</b> <?=e(date('d/m/Y',strtotime($p['fecha'])))?></div><div class="col-md-4"><b>Contacto:</b> <?=e($p['contacto']?:'—')?></div><div class="col-md-4"><b>Estado:</b> <?=e($p['estado'])?></div><div class="col-md-4"><b>Monto:</b> <?=numero_py($p['monto'])?></div><div class="col-md-4"><b>Remisión:</b> <?=e($p['numero_servicio']?:'—')?></div><div class="col-12"><b>Detalle:</b><br><?=nl2br(e($p['detalle']))?></div></div></div></div><div class="card card-hm"><div class="card-body"><h5>Seguimiento</h5><form method="post" class="row g-2 mb-4"><input type="hidden" name="tipo" value="seguimiento"><input type="hidden" name="presupuesto_id" value="<?=$id?>"><div class="col-md-8"><textarea class="form-control" name="detalle" required placeholder="Detalle del seguimiento"></textarea></div><div class="col-md-2"><select class="form-select" name="estado"><?php foreach($estados as $o):?><option <?=$p['estado']===$o?'selected':''?>><?=$o?></option><?php endforeach;?></select></div><div class="col-md-2"><button class="btn btn-hm w-100">Guardar</button></div></form><?php while($s=$segs->fetch_assoc()):?><div class="border-start border-3 ps-3 mb-3"><small><?=e(date('d/m/Y H:i',strtotime($s['creado_en'])))?> · <?=e($s['usuario'])?> · <?=e($s['estado'])?></small><div><?=nl2br(e($s['detalle']))?></div></div><?php endwhile;?></div></div>
<?php else:$p=['cliente_id'=>'','remision_id'=>'','fecha'=>date('Y-m-d'),'contacto'=>'','detalle'=>'','monto'=>0,'estado'=>'Pendiente'];if($id)$p=$conn->query("SELECT * FROM presupuestos WHERE id=$id")->fetch_assoc();?><a href="presupuestos.php">← Volver</a><h3 class="page-title"><?=$id?'Editar':'Nuevo'?> presupuesto</h3><?php if($error):?><div class="alert alert-danger"><?=e($error)?></div><?php endif;?><form method="post"><input type="hidden" name="tipo" value="presupuesto"><input type="hidden" name="id" value="<?=$id?>"><div class="card card-hm"><div class="card-body"><div class="row g-3"><div class="col-md-6"><label>Cliente *</label><select class="form-select" name="cliente_id" required><option value="">Seleccione</option><?php while($c=$clientes->fetch_assoc()):?><option value="<?=$c['id']?>" <?=(int)$p['cliente_id']===(int)$c['id']?'selected':''?>><?=e($c['nombre'])?></option><?php endwhile;?></select></div><div class="col-md-3"><label>Fecha *</label><input class="form-control" type="date" name="fecha" value="<?=e($p['fecha'])?>" required></div><div class="col-md-3"><label>Contacto</label><input class="form-control" name="contacto" value="<?=e($p['contacto'])?>"></div><div class="col-md-6"><label>Remisión vinculada</label><select class="form-select" name="remision_id"><option value="">Sin remisión</option><?php while($r=$remisiones->fetch_assoc()):?><option value="<?=$r['id']?>" <?=(int)$p['remision_id']===(int)$r['id']?'selected':''?>><?=e($r['numero_servicio'].' - '.$r['cliente'])?></option><?php endwhile;?></select></div><div class="col-md-3"><label>Monto</label><input class="form-control" type="number" step="0.01" min="0" name="monto" value="<?=e($p['monto'])?>"></div><div class="col-md-3"><label>Estado</label><select class="form-select" name="estado"><?php foreach($estados as $o):?><option <?=$p['estado']===$o?'selected':''?>><?=$o?></option><?php endforeach;?></select></div><div class="col-12"><label>Detalle del presupuesto *</label><textarea class="form-control" name="detalle" rows="8" required><?=e($p['detalle'])?></textarea></div></div><button class="btn btn-hm mt-3">Guardar presupuesto</button></div></div></form><?php endif;?></div></main><?php include __DIR__.'/../../includes/footer.php';?>
