<?php
/**
 * Ability: wp-agent/list-settings
 *
 * Read-only. Listet die vollständige Allowlist gängiger Einstellungen
 * (WPAGENT_SETTINGS_ALLOWLIST aus includes/settings-allowlist.php) mit ihrem
 * jeweils aktuellen Wert auf, damit ein Aufrufer nicht jede Einstellung
 * einzeln per wp-agent/get-setting abfragen muss.
 *
 * @package WPAgentCompanion
 */

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

function wpagent_ability_list_settings(): array {
	return array(
		'label'               => __( 'Einstellungen auflisten', 'wp-agent-companion' ),
		'description'         => __( 'Listet alle Einstellungen aus der Allowlist mit ihrem aktuellen Wert auf (Website-Titel, Anzeige-Optionen, Permalink-Struktur, Zeitzone, Datums-/Zeitformat, Standard-Kategorie und mehr). Nimmt keinen Eingabeparameter entgegen.', 'wp-agent-companion' ),
		'category'            => 'wp-agent',
		'input_schema'        => array(
			'type'                 => 'object',
			'properties'           => array(),
			'required'             => array(),
			'additionalProperties' => false,
			'maxProperties'        => 0,
		),
		'output_schema'       => array(
			'type'       => 'object',
			'properties' => array(
				'items' => array(
					'type'     => 'array',
					'maxItems' => count( WPAGENT_SETTINGS_ALLOWLIST ),
					'items' => array(
						'type'       => 'object',
						'properties' => array(
							'name'   => array( 'type' => 'string', 'enum' => WPAGENT_SETTINGS_ALLOWLIST ),
							'exists' => array( 'type' => 'boolean' ),
							'value'  => wpagent_setting_public_value_schema(),
						),
						'required'             => array( 'name', 'exists', 'value' ),
						'additionalProperties' => false,
					),
				),
				'total' => array( 'type' => 'integer', 'minimum' => 0, 'maximum' => count( WPAGENT_SETTINGS_ALLOWLIST ) ),
			),
			'required'             => array( 'items', 'total' ),
			'additionalProperties' => false,
		),
		'execute_callback'    => 'wpagent_exec_list_settings',
		'permission_callback' => 'wpagent_perm_manage_options',
		'meta'                => array(
			'show_in_rest' => true,
			'annotations'  => array(
				'readonly'    => true,
				'destructive' => false,
				'idempotent'  => true,
			),
		),
	);
}

/**
 * @param mixed $input Unbenutzt, die Ability hat keine Eingabeparameter.
 * @return array
 */
function wpagent_exec_list_settings( $input ) {
	$items = array();

	foreach ( WPAGENT_SETTINGS_ALLOWLIST as $name ) {
		$read    = wpagent_core_mutator_setting_state( $name );
		$value   = wpagent_setting_public_value( $name, $read );
		if ( is_wp_error( $value ) ) {
			return $value;
		}
		$items[] = array(
			'name'   => $name,
			'exists' => $read['exists'],
			'value'  => $value,
		);
	}

	return array(
		'items' => $items,
		'total' => count( $items ),
	);
}
