<?php
// admin/facturas_arca_list.php
// Lista de proformas y, si existen, sus facturas AFIP/ARCA asociadas + filtros + UI compacta para popup 800x600

ini_set('display_errors', 1);
error_reporting(E_ALL);

require_once __DIR__ . '/../config.php';

try {
    $dsn = "mysql:host={$sql_details['host']};dbname={$sql_details['db']};port={$sql_details['port']};charset=utf8";
    $pdo = new PDO($dsn, $sql_details['user'], $sql_details['pass'], [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_EMULATE_PREPARES   => false,
    ]);
} catch (PDOException $e) {
    die("Error de conexión a la base de datos: " . htmlspecialchars($e->getMessage()));
}

// -----------------------------------------------------------------------------
// Filtros
// -----------------------------------------------------------------------------
$search     = isset($_GET['q']) ? trim($_GET['q']) : '';
$cbteTipo   = isset($_GET['cbte_tipo']) ? trim($_GET['cbte_tipo']) : '';    // tipo de comprobante (AFIP/ARCA)
$cbteLetra  = isset($_GET['cbte_letra']) ? trim($_GET['cbte_letra']) : '';  // A/B/C/M (si aplica)
$estadoArca = isset($_GET['estado_arca']) ? trim($_GET['estado_arca']) : ''; // all | autorizado | sin_autorizar | rechazado | observado

// -----------------------------------------------------------------------------
// Consulta principal
//  - selling_info / selling_price / customers
//  - LEFT JOIN facturas_afip_info para saber si la proforma ya fue autorizada
// -----------------------------------------------------------------------------
$sql = "
    SELECT 
        si.invoice_id,
        si.info_id,
        si.store_id,
        si.customer_id,
        si.created_at,
        si.inv_type,
        si.status,
        c.customer_name,
        c.customer_cuit,
        c.customer_iva_cond,
        sp.payable_amount,

        -- Datos de AFIP/ARCA si existen
        fai.id            AS factura_afip_id,
        fai.cbte_tipo,
        fai.cbte_letra,
        fai.punto_venta,
        fai.cbte_numero,
        fai.cae,
        fai.cae_vto,
        fai.resultado
    FROM selling_info si
    JOIN selling_price sp 
      ON sp.invoice_id = si.invoice_id
     AND sp.store_id   = si.store_id
    JOIN customers c 
      ON c.customer_id = si.customer_id
    LEFT JOIN facturas_afip_info fai
      ON fai.invoice_id = si.invoice_id
     AND fai.store_id   = si.store_id
    WHERE si.inv_type = 'sell'
      AND si.status   = 1
";

$params = [];

// Buscar
if ($search !== '') {
    $sql .= " AND (si.invoice_id    LIKE :q1 
               OR  c.customer_name  LIKE :q2 
               OR  c.customer_cuit  LIKE :q3)";
    $like = '%' . $search . '%';
    $params[':q1'] = $like;
    $params[':q2'] = $like;
    $params[':q3'] = $like;
}

// Filtro tipo de comprobante (AFIP/ARCA)
if ($cbteTipo !== '') {
    // si pedís filtrar por tipo, tiene que existir registro en facturas_afip_info
    $sql .= " AND fai.cbte_tipo = :cbte_tipo";
    $params[':cbte_tipo'] = (int)$cbteTipo;
}

// Filtro letra (A/B/C/M)
if ($cbteLetra !== '') {
    $sql .= " AND fai.cbte_letra = :cbte_letra";
    $params[':cbte_letra'] = $cbteLetra;
}

// Filtro estado ante ARCA
// - autorizado: existe registro y (resultado='A' o CAE no vacío)
// - rechazado: existe registro y resultado='R'
// - observado: existe registro y resultado='O' (si lo usás)
// - sin_autorizar: no existe registro (fai.id IS NULL)
if ($estadoArca !== '' && $estadoArca !== 'all') {
    if ($estadoArca === 'sin_autorizar') {
        $sql .= " AND fai.id IS NULL";
    } elseif ($estadoArca === 'autorizado') {
        $sql .= " AND fai.id IS NOT NULL AND (fai.resultado = 'A' OR (fai.cae IS NOT NULL AND fai.cae <> ''))";
    } elseif ($estadoArca === 'rechazado') {
        $sql .= " AND fai.id IS NOT NULL AND fai.resultado = 'R'";
    } elseif ($estadoArca === 'observado') {
        $sql .= " AND fai.id IS NOT NULL AND fai.resultado = 'O'";
    }
}

$sql .= " ORDER BY si.created_at DESC LIMIT 200";

$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$rows = $stmt->fetchAll();

// Para armar selects (tipos y letras disponibles en lo que vino)
$tiposDisponibles = [];
$letrasDisponibles = [];

foreach ($rows as $r) {
    if (!empty($r['cbte_tipo'])) {
        $tiposDisponibles[(int)$r['cbte_tipo']] = (int)$r['cbte_tipo'];
    }
    if (!empty($r['cbte_letra'])) {
        $letrasDisponibles[$r['cbte_letra']] = $r['cbte_letra'];
    }
}
ksort($tiposDisponibles);
ksort($letrasDisponibles);

// Helper formato dinero
function f_money($v) {
    return number_format((float)$v, 2, ',', '.');
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Proformas / Facturas ARCA</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet"
          href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">

    <style>
      /* UI compacta pensada para popup 800x600 */
      html, body { height: 100%; }
      body { font-size: 13px; }
      .container-fluid { padding: 10px 12px; }
      h3 { font-size: 1.05rem; margin-bottom: .5rem; }
      .muted { color: #6c757d; }

      .form-label { font-size: 12px; margin-bottom: 2px; }
      .form-control, .form-select { font-size: 13px; }
      .btn { font-size: 13px; }
      .btn-sm, .form-control-sm, .form-select-sm { font-size: 12px; }

      .card { border-radius: 12px; }
      .card-header { padding: 8px 12px; }
      .card-body { padding: 0; }

      .table { font-size: 12px; }
      .table thead th { position: sticky; top: 0; z-index: 1; }
      .table td, .table th { vertical-align: middle; }
      .table td { padding-top: .35rem; padding-bottom: .35rem; }
      .badge { font-size: 11px; }

      .nowrap { white-space: nowrap; }
      .col-min { width: 1%; white-space: nowrap; }
      .afip-box { line-height: 1.25; }
      .scroll-wrap {
        /* altura para que en popup se vea el filtro + tabla sin desbordar */
        max-height: calc(600px - 150px);
        overflow: auto;
      }
    </style>
</head>

<body class="bg-light">
<div class="container-fluid">

    <div class="d-flex align-items-center justify-content-between mb-2">
        <h3 class="mb-0">Proformas y facturas ARCA</h3>
        <div class="muted small d-none d-sm-block">Vista compacta</div>
    </div>

    <!-- Buscador + filtros -->
    <form class="row g-2 mb-2" method="get" action="facturas_arca_list.php">
        <div class="col-12 col-md-4">
            <label class="form-label">Buscar</label>
            <input type="text"
                   name="q"
                   value="<?= htmlspecialchars($search); ?>"
                   class="form-control form-control-sm"
                   placeholder="Proforma, cliente o CUIT">
        </div>

        <div class="col-6 col-md-2">
            <label class="form-label">Tipo doc (cbte)</label>
            <select name="cbte_tipo" class="form-select form-select-sm">
                <option value="">Todos</option>
                <?php foreach ($tiposDisponibles as $t): ?>
                    <option value="<?= (int)$t; ?>" <?= ($cbteTipo !== '' && (int)$cbteTipo === (int)$t) ? 'selected' : ''; ?>>
                        <?= (int)$t; ?>
                    </option>
                <?php endforeach; ?>
            </select>
        </div>

        <div class="col-6 col-md-2">
            <label class="form-label">Letra</label>
            <select name="cbte_letra" class="form-select form-select-sm">
                <option value="">Todas</option>
                <?php foreach ($letrasDisponibles as $l): ?>
                    <option value="<?= htmlspecialchars($l); ?>" <?= ($cbteLetra !== '' && $cbteLetra === $l) ? 'selected' : ''; ?>>
                        <?= htmlspecialchars($l); ?>
                    </option>
                <?php endforeach; ?>
            </select>
        </div>

        <div class="col-12 col-md-2">
            <label class="form-label">Estado ARCA</label>
            <select name="estado_arca" class="form-select form-select-sm">
                <option value="all" <?= ($estadoArca === '' || $estadoArca === 'all') ? 'selected' : ''; ?>>Todos</option>
                <option value="autorizado" <?= ($estadoArca === 'autorizado') ? 'selected' : ''; ?>>Autorizado</option>
                <option value="sin_autorizar" <?= ($estadoArca === 'sin_autorizar') ? 'selected' : ''; ?>>Sin autorizar</option>
                <option value="rechazado" <?= ($estadoArca === 'rechazado') ? 'selected' : ''; ?>>Rechazado</option>
                <option value="observado" <?= ($estadoArca === 'observado') ? 'selected' : ''; ?>>Observado</option>
            </select>
        </div>

        <div class="col-6 col-md-1 d-grid">
            <label class="form-label invisible">.</label>
            <button type="submit" class="btn btn-primary btn-sm">Filtrar</button>
        </div>
        <div class="col-6 col-md-1 d-grid">
            <label class="form-label invisible">.</label>
            <a href="facturas_arca_list.php" class="btn btn-outline-secondary btn-sm">Limpiar</a>
        </div>
    </form>

    <!-- Tabla -->
    <div class="card shadow-sm">
        <div class="card-body">
            <div class="scroll-wrap">
                <div class="table-responsive">
                    <table class="table table-striped table-hover table-sm mb-0">
                        <thead class="table-light">
                            <tr>
                                <th class="col-min">Proforma</th>
                                <th class="nowrap">Fecha</th>
                                <th>Cliente</th>
                                <th class="nowrap">CUIT</th>
                                <th class="nowrap">IVA</th>
                                <th class="text-end nowrap">Total</th>
                                <th class="nowrap">ARCA</th>
                                <th class="text-center col-min">Acciones</th>
                            </tr>
                        </thead>
                        <tbody>
                        <?php if (empty($rows)): ?>
                            <tr>
                                <td colspan="8" class="text-center py-4">
                                    No se encontraron proformas.
                                </td>
                            </tr>
                        <?php else: ?>
                            <?php foreach ($rows as $fila): ?>
                                <?php
                                    $fecha = $fila['created_at']
                                        ? date('d/m/Y H:i', strtotime($fila['created_at']))
                                        : '';
                                    $tieneAfip = !empty($fila['factura_afip_id']);

                                    $resultado = $fila['resultado'] ?? '';
                                    $cae = $fila['cae'] ?? '';

                                    // Badge de estado
                                    if (!$tieneAfip) {
                                        $estadoBadge = '<span class="badge bg-warning text-dark">Sin autorizar</span>';
                                    } else {
                                        if ($resultado === 'A' || ($cae !== null && $cae !== '')) {
                                            $estadoBadge = '<span class="badge bg-success">Autorizado</span>';
                                        } elseif ($resultado === 'R') {
                                            $estadoBadge = '<span class="badge bg-danger">Rechazado</span>';
                                        } elseif ($resultado === 'O') {
                                            $estadoBadge = '<span class="badge bg-info text-dark">Observado</span>';
                                        } else {
                                            $estadoBadge = '<span class="badge bg-secondary">Procesado</span>';
                                        }
                                    }
                                ?>
                                <tr>
                                    <td class="nowrap"><?= htmlspecialchars($fila['invoice_id']); ?></td>
                                    <td class="nowrap"><?= htmlspecialchars($fecha); ?></td>
                                    <td><?= htmlspecialchars($fila['customer_name']); ?></td>
                                    <td class="nowrap"><?= htmlspecialchars($fila['customer_cuit']); ?></td>
                                    <td class="nowrap"><?= htmlspecialchars($fila['customer_iva_cond']); ?></td>
                                    <td class="text-end nowrap">$ <?= f_money($fila['payable_amount']); ?></td>
                                    <td>
                                        <div class="afip-box">
                                            <?= $estadoBadge; ?>
                                            <?php if ($tieneAfip): ?>
                                                <div class="text-muted mt-1">
                                                    <?= htmlspecialchars($fila['cbte_letra']); ?>
                                                    (<?= (int)$fila['cbte_tipo']; ?>)
                                                    PV <?= str_pad((int)$fila['punto_venta'], 4, '0', STR_PAD_LEFT); ?> -
                                                    N° <?= str_pad((int)$fila['cbte_numero'], 8, '0', STR_PAD_LEFT); ?>
                                                </div>
                                                <?php if (!empty($fila['cae'])): ?>
                                                    <div class="text-muted">
                                                        CAE: <?= htmlspecialchars($fila['cae']); ?>
                                                    </div>
                                                <?php endif; ?>
                                            <?php endif; ?>
                                        </div>
                                    </td>
                                    <td class="text-center">
                                        <?php if ($tieneAfip): ?>
                                            <a href="factura_afip_html.php?id=<?= (int)$fila['factura_afip_id']; ?>"
                                               class="btn btn-sm btn-outline-secondary"
                                               target="_blank">
                                                Ver
                                            </a>
                                        <?php else: ?>
                                            <a href="factura_arca.php?invoice_id=<?= urlencode($fila['invoice_id']); ?>"
                                               class="btn btn-sm btn-primary">
                                                ARCA
                                            </a>
                                        <?php endif; ?>
                                    </td>
                                </tr>
                            <?php endforeach; ?>
                        <?php endif; ?>
                        </tbody>
                    </table>
                </div>
            </div>

            <div class="px-2 py-2 small text-muted">
                Mostrando hasta 200 resultados (ordenados por fecha desc).
            </div>
        </div>
    </div>

</div>
</body>
</html>
