<?php
/**
 * Trait for re-useable JSON response helper.
 *
 * @package Tutor\Traits
 * @since 2.5.0
 */

namespace Tutor\Traits;

/**
 * JsonResponse trait
 *
 * @since 2.5.0
 */
trait JsonResponse {

	/**
	 * JSON response
	 *
	 * @since 3.0.0
	 *
	 * @param string  $message message.
	 * @param mixed   $data data.
	 * @param integer $status_code status code.
	 *
	 * @return void   JSON data response.
	 */
	public function json_response( string $message = '', $data = null, int $status_code = 200 ) {
		wp_send_json(
			array(
				'status_code' => $status_code,
				'message'     => $message,
				'data'        => $data,
			),
			$status_code
		);
	}

	/**
	 * JSON response for bad request
	 *
	 * @param string $message message.
	 *
	 * @return void
	 */
	public function response_bad_request( ?string $message = null ) {
		$this->json_response( $message ?? __( 'Bad request', 'tutor' ), null, 400 );
	}

	/**
	 * Response JSON success message.
	 *
	 * @param string $message success message.
	 * @param int    $status_code status code.
	 *
	 * @return void
	 */
	public function response_success( $message, $status_code = 200 ) {
		wp_send_json(
			array(
				'status_code' => $status_code,
				'success'     => true,
				'message'     => $message,
			),
			$status_code
		);
	}

	/**
	 * Response JSON fail message.
	 *
	 * @param string $message fail message.
	 * @param int    $status_code status code.
	 *
	 * @return void
	 */
	public function response_fail( $message, $status_code = 200 ) {
		wp_send_json(
			array(
				'status_code' => $status_code,
				'success'     => false,
				'message'     => $message,
			),
			$status_code
		);
	}

	/**
	 * Response JSON data.
	 *
	 * @param array $data data.
	 * @param int   $status_code status code.
	 *
	 * @return void
	 */
	public function response_data( $data, $status_code = 200 ) {
		wp_send_json(
			array(
				'status_code' => $status_code,
				'success'     => true,
				'data'        => $data,
			),
			$status_code
		);
	}
}
