<?php
/**
 * Controlador REST del estado del recálculo masivo de precios (F3-3).
 *
 * @package Entrepo
 */

namespace Entrepo\Rest;

use Entrepo\Infra\RecalcJob;

defined( 'ABSPATH' ) || exit;

/**
 * Recurso REST `recalculo`: expone el progreso de `RecalcJob` para que el
 * panel (`RecalcBanner.js`) lo consulte por polling mientras el recálculo
 * masivo de la matriz de precios está en curso.
 */
final class RecalcController {

	/** Declara las rutas del recurso bajo `entrepo/v1`. */
	public function registrar_rutas(): void {
		register_rest_route(
			'entrepo/v1',
			'/recalculo/estado',
			array(
				'methods'             => 'GET',
				'permission_callback' => array( $this, 'puede' ),
				'callback'            => array( $this, 'estado' ),
			)
		);
	}

	/**
	 * Gate del endpoint: mismo criterio que el resto del panel — el progreso
	 * del recálculo es información de gestión de tienda, no pública.
	 *
	 * @return bool
	 */
	public function puede(): bool {
		return current_user_can( 'manage_woocommerce' );
	}

	/**
	 * Estado actual del recálculo masivo de precios.
	 *
	 * @param \WP_REST_Request $req Petición (sin parámetros; la firma la exige el callback REST).
	 * @return \WP_REST_Response
	 */
	public function estado( \WP_REST_Request $req ): \WP_REST_Response { // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.Found -- Firma del callback REST.
		return new \WP_REST_Response( RecalcJob::estado(), 200 );
	}
}
