<?php
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../includes/helpers.php';

$pdo = getConnection();

try {
    $proveedor_id = isset($_GET['proveedor_id']) ? (int)$_GET['proveedor_id'] : 0;
    $estado = isset($_GET['estado']) ? trim($_GET['estado']) : '';
    $search = isset($_GET['search']) ? trim($_GET['search']) : '';
    $venc_desde = isset($_GET['venc_desde']) ? trim($_GET['venc_desde']) : '';
    $venc_hasta = isset($_GET['venc_hasta']) ? trim($_GET['venc_hasta']) : '';

    $where = ["1=1"];
    $params = [];

    if ($proveedor_id > 0) {
        $where[] = "cp.proveedor_id = ?";
        $params[] = $proveedor_id;
    }
    if (!empty($estado)) {
        $where[] = "cp.estado = ?";
        $params[] = $estado;
    }
    if (!empty($search)) {
        $where[] = "(l.nombre LIKE ? OR cp.numero_factura LIKE ?)";
        $s = "%$search%";
        $params[] = $s;
        $params[] = $s;
    }
    if (!empty($venc_desde)) {
        $where[] = "cp.fecha_vencimiento >= ?";
        $params[] = $venc_desde;
    }
    if (!empty($venc_hasta)) {
        $where[] = "cp.fecha_vencimiento <= ?";
        $params[] = $venc_hasta;
    }

    $sql = "SELECT cp.*, l.nombre as proveedor_nombre, l.telefono as proveedor_telefono
            FROM cuentas_pagar cp
            INNER JOIN lugarcompra l ON cp.proveedor_id = l.id
            WHERE " . implode(' AND ', $where) . "
            ORDER BY cp.fecha_vencimiento ASC, cp.estado ASC";

    $stmt = $pdo->prepare($sql);
    $stmt->execute($params);
    $cuentas = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Calcular resumen
    $total_pendiente = 0;
    $total_vencido = 0;
    $count_vencido = 0;
    $hoy = date('Y-m-d');

    foreach ($cuentas as &$c) {
        if ($c['estado'] !== 'pagada' && $c['estado'] !== 'anulada') {
            $total_pendiente += (float)$c['saldo_pendiente'];
        }
        if ($c['estado'] !== 'pagada' && $c['estado'] !== 'anulada' && $c['fecha_vencimiento'] && $c['fecha_vencimiento'] < $hoy) {
            $total_vencido += (float)$c['saldo_pendiente'];
            $count_vencido++;
        }
    }
    unset($c);

    json_success([
        'cuentas' => $cuentas,
        'resumen' => [
            'total_pendiente' => round($total_pendiente, 2),
            'total_vencido' => round($total_vencido, 2),
            'count_vencido' => $count_vencido,
            'count_total' => count($cuentas)
        ]
    ]);
} catch (Exception $e) {
    json_error('Error al listar cuentas: ' . $e->getMessage());
}
