<?php
/**
 * RobotsTxt class
 *
 * Handles installed products related REST API endpoints for the SureRank plugin.
 *
 * @package SureRank\Inc\API
 */

namespace SureRank\Inc\API;

use SureRank\Inc\Functions\Send_Json;
use SureRank\Inc\Traits\Get_Instance;
use WP_REST_Server;

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

/**
 * Class RobotsTxt
 *
 * Handles robots.txt related REST API endpoints.
 */
class RobotsTxt extends Api_Base {

	use Get_Instance;

	/**
	 * Route Get Robots.txt
	 */
	protected const ROBOTS_TXT = '/robots-txt';

	/**
	 * Register API routes.
	 *
	 * @since 1.2.0
	 * @return void
	 */
	public function register_routes() {
		register_rest_route(
			$this->get_api_namespace(),
			self::ROBOTS_TXT,
			[
				'methods'             => WP_REST_Server::CREATABLE, // POST method.
				'callback'            => [ $this, 'update_robots_txt' ],
				'permission_callback' => [ $this, 'validate_permission' ],
				'args'                => [
					'robots_txt_content' => [
						'required' => true,
						'type'     => 'string',
					],
				],
				'role_capability'     => 'global_setting',
			]
		);
	}

	/**
	 * Update the robots.txt content.
	 *
	 * @param \WP_REST_Request<array<string, mixed>> $request Request object.
	 * @return void
	 */
	public function update_robots_txt( $request ) {

		$robots_content = $request->get_param( 'robots_txt_content' );

		$robots_content = sanitize_textarea_field( $robots_content );

		update_option( SURERANK_ROBOTS_TXT_CONTENT, $robots_content );

		Send_Json::success(
			[
				'success' => true,
				'data'    => [
					'robots_txt_content' => $robots_content,
				],
			]
		);
	}

}
