<?php
set_time_limit (1800); 
require ''.getcwd().'/config.php';
require ''.getcwd().'/libs/Session.php';
require ''.getcwd().'/libs/Database.php';
Session::set('rol', '2');
Session::set('modo', 1);
require_once ''.getcwd().'/controllers/PseController.php';

$fechaInicio = strtotime($_GET['ini'] ?? '');
$fechaFin = strtotime($_GET['fin'] ?? '');

if ($fechaInicio === false || $fechaFin === false) {
    echo "Fechas invalidas";
    exit;
}

if ($fechaInicio > $fechaFin) {
    echo "Rango de fechas invalido";
    exit;
}

$db = new Database(DB_TYPE, DB_HOST, DB_NAME, DB_USER, DB_PASS, DB_CHARSET);
$pse = new PseController();

for ($i = $fechaInicio; $i <= $fechaFin; $i += 86400) {
    $fecha = date('Y-m-d', $i);
    $stm = $db->prepare("SELECT id_venta
        FROM tm_venta
        WHERE id_tipo_doc = 1
        AND estado = 'a'
        AND (enviado_sunat IS NULL OR enviado_sunat = '' OR enviado_sunat = '0')
        AND DATE_FORMAT(fecha_venta,'%Y-%m-%d') = ?
        ORDER BY id_venta ASC");
    $stm->execute([$fecha]);
    $boletasPendientes = $stm->fetchAll(PDO::FETCH_ASSOC);

    if (empty($boletasPendientes)) {
        echo '[' . $fecha . '] Sin boletas pendientes por enviar via PSE<br>';
        continue;
    }

    $enviadas = 0;
    $errores = 0;

    foreach ($boletasPendientes as $row) {
        $idVenta = (int) ($row['id_venta'] ?? 0);
        if ($idVenta <= 0) {
            continue;
        }

        try {
            $resp = $pse->resumenBoleta($idVenta, 1);
            if (is_array($resp) && !empty($resp['ok'])) {
                $enviadas++;
            } else {
                $errores++;
            }
        } catch (Throwable $th) {
            $errores++;
        }
    }

    echo '[' . $fecha . '] Enviadas ' . $enviadas . '/' . count($boletasPendientes) . ' boletas via PSE';
    if ($errores > 0) {
        echo ' (errores: ' . $errores . ')';
    }
    echo '<br>';
}
