<?php
/**
 * DebugInfo class
 *
 * @since 1.4.0
 * @package Classifai
 */

namespace Classifai\Admin;

/**
 * Adds information useful for debugging to the Site Health screen introduced to core in 5.2.
 *
 * @since 1.4.0
 */
class DebugInfo {

	/**
	 * Checks whether this class's register method should run.
	 *
	 * @since 1.4.0
	 *
	 * @return bool
	 */
	public function can_register(): bool {
		return is_admin();
	}

	/**
	 * Adds hook callbacks.
	 *
	 * @since 1.4.0
	 */
	public function register() {
		add_filter( 'debug_information', [ $this, 'add_classifai_debug_information' ] );
	}

	/**
	 * Modifies debug information displayed on the WP Site Health screen.
	 *
	 * @see WP_Debug_Data::debug_data
	 *
	 * @since 1.4.0
	 *
	 * @param array $information The full array of site debug information.
	 * @return array Filtered debug information.
	 */
	public function add_classifai_debug_information( array $information ): array {
		$plugin_data = get_plugin_data( CLASSIFAI_PLUGIN );

		/**
		 * Filters debug information displayed on the Site Health screen for the ClassifAI plugin.
		 *
		 * @since 1.4.0
		 * @hook classifai_debug_information
		 * @see {@link https://developer.wordpress.org/reference/hooks/debug_information/|debug_information}
		 *
		 * @param array 'debug_info' Array of associative arrays corresponding to lines shown on the Site Health screen. Each array
		 *              requires a `label` and a `value` field. Other accepted fields are `debug` and `private`.
		 * @param array $information The full array of site debug information.
		 *
		 * @return array Filtered array of debug information.
		 */
		$fields = apply_filters(
			'classifai_debug_information',
			[
				[
					'label' => __( 'Version', 'classifai' ),
					'value' => $plugin_data['Version'],
				],
			],
			$information
		);

		if ( ! is_array( $fields ) ) {
			$fields = [];
		}

		$validate_field = function ( $field ) {
			if ( ! is_array( $field ) ) {
				return false;
			}

			return isset( $field['label'] ) && isset( $field['value'] );
		};
		$fields         = array_filter( $fields, $validate_field );

		$text_domain = $plugin_data['TextDomain'];
		$label       = $plugin_data['Name'];

		$information[ $text_domain ] = compact( 'label', 'fields' );

		return $information;
	}
}
