<?php

/**
 * Removes Authorize.net SDK clientId injection (causes E00013 on current API).
 * Re-run after: composer update authorizenet/authorizenet
 *
 * @see https://github.com/AuthorizeNet/sdk-php/issues/474
 */

$file = dirname(__DIR__) . '/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php';

if (! is_file($file)) {
    fwrite(STDERR, "Authorize.net SDK not installed; skip patch.\n");
    exit(0);
}

$contents = file_get_contents($file);
$needle   = '$this->apiRequest->setClientId("sdk-php-"';

if (strpos($contents, $needle) === false) {
    if (strpos($contents, 'clientId triggers E00013') !== false) {
        fwrite(STDOUT, "Authorize.net SDK already patched.\n");
        exit(0);
    }

    fwrite(STDERR, "Authorize.net SDK layout changed; patch not applied.\n");
    exit(1);
}

$contents = preg_replace(
    '/\s*\$this->apiRequest->setClientId\("sdk-php-" \. \\\\net\\\\authorize\\\\api\\\\constants\\\\ANetEnvironment::VERSION\);\s*/',
    "\n        // clientId triggers E00013 \"The field is invalid\" on current Authorize.net API (sdk-php #474).\n",
    $contents,
    1,
    $count
);

if ($count !== 1) {
    fwrite(STDERR, "Authorize.net SDK patch failed.\n");
    exit(1);
}

file_put_contents($file, $contents);
fwrite(STDOUT, "Authorize.net SDK patched (removed clientId).\n");
