<?php
// Atualiza status de contas a pagar vencidas e dispara notificações de vencimento

require __DIR__ . '/../bootstrap.php';

use Gestoreasy\Core\Tenant\ConnectionManager;
use Gestoreasy\Core\Http\Request;
use Modules\Financeiro\Controllers\ContasPagarController;

// Parâmetros CLI: --tenant=TENANT --days=N --dry-run
$tenant = null; $days = 5; $dryRun = false;
foreach ($argv as $arg) {
    if (str_starts_with($arg, '--tenant=')) { $tenant = trim(substr($arg, 9)); }
    elseif (str_starts_with($arg, '--days=')) { $days = max(1, (int)trim(substr($arg, 7))); }
    elseif ($arg === '--dry-run') { $dryRun = true; }
}

try {
    $pdo = ConnectionManager::forTenant($tenant);
    // Verificar existência da tabela
    $exists = $pdo->query("SHOW TABLES LIKE 'contas_pagar'")->rowCount() > 0;
    if (!$exists) {
        fwrite(STDERR, "[ERRO] Tabela 'contas_pagar' não encontrada para o tenant '" . ($tenant ?: 'default') . "'. Execute as migrações.\n");
        exit(2);
    }

    // Contar pendentes já vencidos
    $countStmt = $pdo->query("SELECT COUNT(*) AS c FROM contas_pagar WHERE status = 'pendente' AND data_vencimento < CURDATE()");
    $toUpdate = (int)($countStmt->fetch()['c'] ?? 0);

    if ($dryRun) {
        echo "[DRY-RUN] Contas pendentes vencidas a atualizar: {$toUpdate}\n";
    } else {
        $upd = $pdo->prepare("UPDATE contas_pagar SET status = 'vencido', updated_at = NOW() WHERE status = 'pendente' AND data_vencimento < CURDATE()");
        $upd->execute();
        $affected = $upd->rowCount();
        echo "[OK] Contas marcadas como vencidas: {$affected}\n";
    }

    // Disparar notificações de vencimento próximo (dias configuráveis)
    $controller = new ContasPagarController();
    $req = new Request(headers: [], query: ['days' => $days], body: [], files: [], method: 'POST', uri: '/api/financeiro/contas-pagar/notify-due');
    $res = $controller->notifyDue($req);
    $body = is_array($res->body) ? $res->body : ['message' => (string)$res->body];
    $msg = $body['message'] ?? 'Notificações processadas';
    $cnt = (int)($body['count'] ?? 0);
    echo "[OK] {$msg}. Total de notificações: {$cnt}.\n";

    exit(0);
} catch (\Throwable $e) {
    fwrite(STDERR, "[ERRO] Falha ao atualizar vencidos: " . $e->getMessage() . "\n");
    exit(1);
}