<?php

/**
 * REST endpoint to handle the BCDC to ACDC migration.
 *
 * @package WooCommerce\PayPalCommerce\Settings\Endpoint
 */
declare (strict_types=1);
namespace WooCommerce\PayPalCommerce\Settings\Endpoint;

use WooCommerce\PayPalCommerce\Settings\Data\PaymentSettings;
use WooCommerce\PayPalCommerce\Settings\Service\Migration\PaymentSettingsMigration;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CardButtonGateway;
use WooCommerce\PayPalCommerce\WcGateway\Gateway\CreditCardGateway;
use WP_REST_Server;
use WP_REST_Response;
use WP_REST_Request;
/**
 * REST controller for the BCDC to ACDC migration.
 *
 * Handles the one-time, irreversible upgrade from standard card button
 * processing to advanced credit and debit card processing.
 */
class MigrateToAcdcRestEndpoint extends \WooCommerce\PayPalCommerce\Settings\Endpoint\RestEndpoint
{
    /**
     * The base path for this REST controller.
     *
     * @var string
     */
    protected $rest_base = 'migrate-to-acdc';
    protected PaymentSettings $payment_settings;
    public function __construct(PaymentSettings $payment_settings)
    {
        $this->payment_settings = $payment_settings;
    }
    public function register_routes(): void
    {
        /**
         * POST wc/v3/wc_paypal/migrate-to-acdc
         */
        register_rest_route(static::NAMESPACE, '/' . $this->rest_base, array('methods' => WP_REST_Server::CREATABLE, 'callback' => array($this, 'handle_migration'), 'permission_callback' => array($this, 'check_permission')));
    }
    /**
     * Handles the migration from BCDC to ACDC.
     *
     * Disables the standard card button gateway, enables advanced
     * credit and debit card processing, and clears the BCDC migration
     * override flag option. This operation is irreversible.
     *
     * @param WP_REST_Request $request Full data about the request.
     *
     * @return WP_REST_Response
     */
    public function handle_migration(WP_REST_Request $request): WP_REST_Response
    {
        $this->payment_settings->toggle_method_state(CardButtonGateway::ID, \false);
        $this->payment_settings->toggle_method_state(CreditCardGateway::ID, \true);
        $this->payment_settings->save();
        delete_option(PaymentSettingsMigration::OPTION_NAME_BCDC_MIGRATION_OVERRIDE);
        return $this->return_success(array('success' => \true));
    }
}