<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
<?php

namespace Elementor\Modules\WpRest\Classes;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

class Elementor_Settings {

	public function register(): void {
		register_rest_route('elementor/v1', '/settings/(?P<key>[\w_-]+)', [
			[
				'methods' => \WP_REST_Server::READABLE,
				'permission_callback' => function (): bool {
					return current_user_can( 'manage_options' );
				},
				'sanitize_callback' => function ( string $param ): string {
					return esc_attr( $param );
				},
				'validate_callback' => function ( \WP_REST_Request $request ): bool {
					$params = $request->get_params();

					return 0 === strpos( $params['key'], 'elementor' );
				},
				'callback' => function ( $request ): \WP_REST_Response {
					try {
						$key = $request->get_param( 'key' );
						$current_value = get_option( $key );

						return new \WP_REST_Response([
							'success' => true,
							// Nest in order to allow extending the response with more details.
							'data' => [
								'value' => $current_value,
							],
						], 200);
					} catch ( \Exception $e ) {
						return new \WP_REST_Response([
							'success' => false,
							'data' => [
								'message' => $e->getMessage(),
							],
						], 500);
					}
				},
			],
		]);

		register_rest_route('elementor/v1', '/settings/(?P<key>[\w_-]+)', [
			[
				'methods' => \WP_REST_Server::EDITABLE,
				'permission_callback' => function (): bool {
					return current_user_can( 'manage_options' );
				},
				'sanitize_callback' => function ( string $param ): string {
					return esc_attr( $param );
				},
				'validate_callback' => function ( \WP_REST_Request $request ): bool {
					$params = $request->get_params();
					return 0 === strpos( $params['key'], 'elementor' ) && isset( $params['value'] );
				},
				'callback' => function ( \WP_REST_Request $request ): \WP_REST_Response {
					$key = $request->get_param( 'key' );
					$new_value = $request->get_param( 'value' );
					$current_value = get_option( $key );

					if ( $new_value === $current_value ) {
						return new \WP_REST_Response([
							'success' => true,
						], 200);
					}

					$success = update_option( $key, $new_value );
					if ( $success ) {
						return new \WP_REST_Response([
							'success' => true,
							'data' => [
								'message' => 'Setting updated successfully.',
							],
						], 200);
					} else {
						return new \WP_REST_Response([
							'success' => false,
							'data' => [
								'message' => 'Failed to update setting.',
							],
						], 500);
					}
				},
			],
		]);
	}
}
