<?php
require_once __DIR__ . '/../../config/auth.php';
$id = (int)($_GET['id'] ?? 0);
$error = '';
if (($_SERVER['REQUEST_METHOD'] ?? 'GET') === 'POST') {
    $id = (int)($_POST['cuenta_id'] ?? 0);
    $tipo = in_array($_POST['tipo'] ?? '', ['Ingreso','Egreso','Ajuste'], true) ? $_POST['tipo'] : 'Ingreso';
    $descripcion = limpiar($_POST['descripcion'] ?? '');
    $monto = abs((float)str_replace(['.', ','], ['', '.'], $_POST['monto'] ?? '0'));
    if ($id <= 0 || $descripcion === '' || ($tipo !== 'Ajuste' && $monto <= 0)) $error = 'Complete correctamente todos los campos.';
    else {
        $conn->begin_transaction();
        try {
            $s=$conn->prepare("SELECT saldo_actual FROM cuentas_bancarias WHERE id=? AND categoria='Banco' AND estado='Activa' FOR UPDATE");
            $s->bind_param('i',$id);$s->execute();$actual=$s->get_result()->fetch_assoc();
            if (!$actual) throw new Exception('La cuenta no está activa o no es de tipo Banco.');
            $importe = $tipo === 'Ajuste' ? $monto-(float)$actual['saldo_actual'] : ($tipo === 'Egreso' ? -$monto : $monto);
            $nuevoSaldo = $tipo === 'Ajuste' ? $monto : (float)$actual['saldo_actual']+$importe;
            $s=$conn->prepare('UPDATE cuentas_bancarias SET saldo_actual=? WHERE id=?');
            $s->bind_param('di',$nuevoSaldo,$id);$s->execute();
            $s=$conn->prepare('INSERT INTO movimientos_bancarios(cuenta_id,descripcion,monto,tipo,fecha,usuario_id) VALUES(?,?,?,?,NOW(),?)');
            $uid=usuario_actual_id();$s->bind_param('isdsi',$id,$descripcion,$importe,$tipo,$uid);$s->execute();
            registrar_auditoria($conn,'INSERT','movimientos_bancarios',$s->insert_id,'Movimiento de cuenta');
            $conn->commit(); header('Location: /HM/modules/movimientos/bancos.php?id='.$id); exit;
        } catch(Throwable $e) {$conn->rollback();$error=$e->getMessage();}
    }
}
$cuentas=$conn->query("SELECT * FROM cuentas_bancarias WHERE categoria='Banco' AND estado='Activa' ORDER BY nombre,tipo_cuenta");
$cuenta=$id?$conn->query("SELECT * FROM cuentas_bancarias WHERE id=$id AND categoria='Banco'")->fetch_assoc():null;
$movs=$cuenta?$conn->query("SELECT * FROM movimientos_bancarios WHERE cuenta_id=$id ORDER BY fecha DESC,id DESC LIMIT 50"):null;
include __DIR__.'/../../includes/header.php'; include __DIR__.'/../../includes/sidebar.php';
?>
<main class="main"><?php include __DIR__.'/../../includes/topbar.php';?><div class="content">
<div class="d-flex justify-content-between align-items-center flex-wrap gap-2 mb-3"><div><h3 class="page-title mb-1">Bancos</h3><p class="text-muted mb-0">Saldos y movimientos de cuentas bancarias.</p></div><a class="btn btn-outline-primary" href="/HM/modules/movimientos/mantenimiento_cuentas.php"><i class="fa fa-gears me-1"></i>Mantenimiento</a></div>
<?php if($error):?><div class="alert alert-danger"><?=e($error)?></div><?php endif;?>
<div class="row g-3"><div class="col-lg-4"><div class="card card-hm"><div class="card-body"><h5>Cuentas</h5><?php $cat='';$totalBancos=0;while($c=$cuentas->fetch_assoc()):$totalBancos+=(float)$c['saldo_actual'];if($cat!==$c['categoria']):$cat=$c['categoria'];?><div class="text-uppercase small fw-bold text-muted mt-3 mb-1"><?=e($cat)?></div><?php endif;?><a class="d-flex justify-content-between text-decoration-none border-bottom py-2 <?=$id===$c['id']?'fw-bold':''?>" href="?id=<?=$c['id']?>"><span><?=e($c['nombre'])?><small class="d-block text-muted"><?=e(trim($c['tipo_cuenta'].' '.$c['nro_cuenta']))?></small></span><span class="text-end"><?=numero_py($c['saldo_actual'])?></span></a><?php endwhile;?><div class="d-flex justify-content-between align-items-center border-top mt-3 pt-3 fs-5 fw-bold"><span>Total Bancos</span><span class="text-primary">Gs. <?=numero_py($totalBancos)?></span></div></div></div></div>
<div class="col-lg-8"><?php if(!$cuenta):?><div class="card card-hm"><div class="card-body text-center text-muted py-5">Seleccione una cuenta.</div></div><?php else:?><div class="card card-hm mb-3"><div class="card-body d-flex justify-content-between flex-wrap"><div><h4><?=e($cuenta['nombre'])?></h4><span class="badge bg-secondary"><?=e($cuenta['categoria'])?></span> <?=e(trim($cuenta['tipo_cuenta'].' '.$cuenta['nro_cuenta']))?></div><div class="text-end"><small class="text-muted">SALDO ACTUAL</small><div class="fs-3 fw-bold">Gs. <?=numero_py($cuenta['saldo_actual'])?></div></div></div></div>
<div class="card card-hm mb-3"><div class="card-body"><h5>Registrar movimiento</h5><form method="post" class="row g-2"><input type="hidden" name="cuenta_id" value="<?=$cuenta['id']?>"><div class="col-md-3"><select class="form-select" name="tipo"><option>Ingreso</option><option>Egreso</option><option>Ajuste</option></select></div><div class="col-md-5"><input class="form-control" name="descripcion" placeholder="Concepto" required></div><div class="col-md-4"><input class="form-control numero-miles text-end" name="monto" placeholder="Monto" required></div><div class="col-12"><small class="text-muted d-block mb-2">En Ajuste, el monto indicado reemplaza el saldo actual de la cuenta.</small><button class="btn btn-hm">Guardar movimiento</button></div></form></div></div>
<div class="card card-hm"><div class="card-body table-responsive"><h5>Últimos movimientos</h5><table class="table"><thead><tr><th>Fecha</th><th>Descripción</th><th>Tipo</th><th class="text-end">Monto</th></tr></thead><tbody><?php if(!$movs->num_rows):?><tr><td colspan="4" class="text-muted text-center py-4">Sin movimientos registrados.</td></tr><?php else:while($m=$movs->fetch_assoc()):?><tr><td><?=e(date('d/m/Y H:i',strtotime($m['fecha'])))?></td><td><?=e($m['descripcion'])?></td><td><?=e($m['tipo'])?></td><td class="text-end <?=$m['monto']<0?'text-danger':'text-success'?>"><?=numero_py($m['monto'])?></td></tr><?php endwhile;endif;?></tbody></table></div></div><?php endif;?></div></div>
</div></main><?php include __DIR__.'/../../includes/footer.php';?>
