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

$tipo = $_GET['tipo'] ?? '';
$id = intval($_GET['id'] ?? 0);
$conta_id = intval($_GET['conta_id'] ?? 0);

if ($id <= 0 || $conta_id <= 0 || !in_array($tipo, ['receber','pagar'])) {
    header("Location: conciliacao.php");
    exit;
}

$pdo->beginTransaction();
try {
    $tabela = $tipo === 'receber' ? 'contas_receber' : 'contas_pagar';
    $tipo_mov = $tipo === 'receber' ? 'entrada' : 'saida';

    // Buscar conta
    $stmt = $pdo->prepare("SELECT * FROM {$tabela} WHERE id = :id");
    $stmt->execute(['id' => $id]);
    $conta_fin = $stmt->fetch();

    if (!$conta_fin) throw new Exception("Registro nao encontrado");

    $valor = $conta_fin['valor_pago'] ?: $conta_fin['valor'];

    // Vincular conta bancária
    $upd = $pdo->prepare("UPDATE {$tabela} SET conta_bancaria_id = :cid WHERE id = :id");
    $upd->execute(['cid' => $conta_id, 'id' => $id]);

    // Buscar saldo
    $saldo_stmt = $pdo->prepare("SELECT saldo_atual FROM contas_bancarias WHERE id = :cid");
    $saldo_stmt->execute(['cid' => $conta_id]);
    $saldo_anterior = $saldo_stmt->fetchColumn() ?: 0;
    $saldo_posterior = $tipo === 'receber' ? $saldo_anterior + $valor : $saldo_anterior - $valor;

    // Inserir extrato
    $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, :tipo, :desc, :val, :sa, :sp, CURDATE(), :ref, :rid)");
    $ext->execute([
        'cid' => $conta_id,
        'tipo' => $tipo_mov,
        'desc' => 'Conciliacao: ' . $conta_fin['descricao'],
        'val' => $valor,
        'sa' => $saldo_anterior,
        'sp' => $saldo_posterior,
        'ref' => $tabela,
        'rid' => $id
    ]);

    // Atualizar saldo
    $upd_saldo = $pdo->prepare("UPDATE contas_bancarias SET saldo_atual = :s WHERE id = :cid");
    $upd_saldo->execute(['s' => $saldo_posterior, 'cid' => $conta_id]);

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

header("Location: conciliacao.php?conta_id={$conta_id}");
exit;
