<?php

declare(strict_types=1);

use App\Application\EnvironmentConfig;
use App\Finance\FinanceIntegrityRepairService;

$root = dirname(__DIR__);

require_once $root . '/vendor/autoload.php';

$args = array_slice($argv ?? [], 1);
$apply = in_array('--apply', $args, true);
$help = in_array('--help', $args, true) || in_array('-h', $args, true);

if ($help) {
    echo <<<'HELP'
Zavvion Events finance integrity repair

Usage:
  php bin/repair-finance-integrity [--apply]

Default mode is a dry run. It reports paid local MVP orders whose derived
finance rows need deterministic backfill. With --apply, it backfills only
safe derived rows:
  - organiser gross = customer gross minus platform fee
  - missing order line components
  - missing issued ticket rows where a ticket type is known
  - missing local ledger debits/credits
  - missing local succeeded payment records

It does not hide overages or ambiguous records; those remain in review.
HELP;
    exit(0);
}

$config = EnvironmentConfig::fromFile($root . '/.env');
$dsn = (string) $config->get('DB_DSN', 'mysql:host=127.0.0.1;port=3306;dbname=zavvion_events;charset=utf8mb4');
$user = (string) $config->get('DB_USERNAME', 'root', ['DB_USER']);
$password = (string) $config->get('DB_PASSWORD', '');

$pdo = new PDO($dsn, $user, $password, [
    PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

$result = (new FinanceIntegrityRepairService($pdo))->inspect($apply);

echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . PHP_EOL;
exit($result['unresolved_count'] > 0 ? 2 : 0);
