<?php
require_once __DIR__ . '/../auth/verifica.php';
session_start();
require_once __DIR__ . '/../config/conexao.php';

$id = intval($_GET['id'] ?? 0);
if ($id <= 0) { header("Location: contas_pagar.php"); exit; }

$stmt = $pdo->prepare("SELECT * FROM contas_pagar WHERE id = :id");
$stmt->execute(['id' => $id]);
$conta = $stmt->fetch();

if (!$conta || $conta['status'] === 'pago') {
    header("Location: contas_pagar.php");
    exit;
}

$pdo->beginTransaction();
try {
    $valor_pago = $conta['valor'];

    $stmt = $pdo->prepare("UPDATE contas_pagar SET status='pago', valor_pago=:vp, data_pagamento=CURDATE() WHERE id=:id");
    $stmt->execute(['vp' => $valor_pago, 'id' => $id]);

    // Movimentação
    $mov = $pdo->prepare("INSERT INTO movimentacoes_financeiras (tipo, origem, referencia_id, descricao, valor, data_movimento, forma_pagamento_id, conta_bancaria_id)
                          VALUES ('saida','conta_pagar',:rid,:desc,:val,CURDATE(),:fp,:cb)");
    $mov->execute([
        'rid' => $id,
        'desc' => $conta['descricao'],
        'val' => $valor_pago,
        'fp' => $conta['forma_pagamento_id'],
        'cb' => $conta['conta_bancaria_id']
    ]);

    // Extrato bancário
    if ($conta['conta_bancaria_id']) {
        $saldo = $pdo->prepare("SELECT saldo_atual FROM contas_bancarias WHERE id=:cid");
        $saldo->execute(['cid' => $conta['conta_bancaria_id']]);
        $saldo_anterior = $saldo->fetchColumn() ?: 0;
        $saldo_posterior = $saldo_anterior - $valor_pago;

        $ext = $pdo->prepare("INSERT INTO extrato_bancario (conta_bancaria_id, tipo, descricao, valor, saldo_anterior, saldo_posterior, data_movimento, referencia_tipo, referencia_id)
                              VALUES (:cid, 'saida', :desc, :val, :sa, :sp, CURDATE(), 'contas_pagar', :rid)");
        $ext->execute([
            'cid' => $conta['conta_bancaria_id'],
            'desc' => 'Pagamento: ' . $conta['descricao'],
            'val' => $valor_pago,
            'sa' => $saldo_anterior,
            'sp' => $saldo_posterior,
            'rid' => $id
        ]);

        $upd = $pdo->prepare("UPDATE contas_bancarias SET saldo_atual = :s WHERE id = :cid");
        $upd->execute(['s' => $saldo_posterior, 'cid' => $conta['conta_bancaria_id']]);
    }

    $pdo->commit();
    $_SESSION['msg'] = 'Pagamento realizado com sucesso!';
    $_SESSION['msg_tipo'] = 'sucesso';
} catch (Exception $e) {
    $pdo->rollBack();
    $_SESSION['msg'] = 'Erro: ' . $e->getMessage();
    $_SESSION['msg_tipo'] = 'erro';
}

header("Location: contas_pagar.php");
exit;
