<?php
namespace WooNooW\Admin\Rest;

use WP_REST_Request;
use WooNooW\Admin\Compat\SettingsProvider;

if ( ! defined('ABSPATH') ) exit;

class SettingsController {
    public static function init() {
        add_action('rest_api_init', [__CLASS__, 'register']);
    }

    public static function can_manage(): bool {
        return current_user_can('manage_woocommerce');
    }

    public static function register() {
        register_rest_route('wnw/v1', '/settings/tabs', [
            'methods' => 'GET',
            'callback' => [__CLASS__, 'tabs'],
            'permission_callback' => [__CLASS__, 'can_manage'],
        ]);

        register_rest_route('wnw/v1', '/settings/(?P<tab>[a-z0-9_\-]+)', [
            [
                'methods'  => 'GET',
                'callback' => [__CLASS__, 'get_tab'],
                'permission_callback' => [__CLASS__, 'can_manage'],
                'args'     => ['section' => ['required' => false]],
            ],
            [
                'methods'  => 'POST',
                'callback' => [__CLASS__, 'save_tab'],
                'permission_callback' => [__CLASS__, 'can_manage'],
            ],
        ]);
    }

    public static function tabs(WP_REST_Request $req) {
        return ['tabs' => SettingsProvider::get_tabs()];
    }

    public static function get_tab(WP_REST_Request $req) {
        $tab = sanitize_key($req['tab']);
        $section = sanitize_text_field($req->get_param('section') ?? '');
        return SettingsProvider::get_tab_schema($tab, $section);
    }

    public static function save_tab(WP_REST_Request $req) {
        $tab = sanitize_key($req['tab']);
        $section = sanitize_text_field($req->get_param('section') ?? '');
        $payload = (array) $req->get_json_params();
        return SettingsProvider::save_tab($tab, $section, $payload);
    }
}