<?php

class OsSmsHelper {



	/**
	 * @param $to
	 * @param $content
	 *
	 * @return array [
	 * 'status' => string,
	 * 'message' => string,
	 * 'to' => string,
	 * 'content' => string,
	 * 'processor_code' => string,
	 * 'processor_name' => string,
	 * 'processed_datetime' => string,
	 * 'extra_data' => array
	 * ]
	 */
	public static function send_sms( $to, $content, $activity_data = [] ): array {
		$result = [
			'status'             => LATEPOINT_STATUS_ERROR,
			'message'            => __( 'No SMS processor is selected.', 'latepoint' ),
			'to'                 => $to,
			'content'            => $content,
			'processor_code'     => '',
			'processor_name'     => '',
			'processed_datetime' => '',
			'extra_data'         => [
				'activity_data' => $activity_data,
			],
			'errors'             => [],
		];

		if ( OsSettingsHelper::is_sms_allowed() && OsNotificationsHelper::is_notification_type_enabled( 'sms' ) ) {
			/**
			 * Result of sending an SMS message to a recipient's phone number
			 *
			 * @param {array} $result The array of data describing the send operation
			 * @param {string} $to The recipient's phone number
			 * @param {string} $content The message to send to the recipient
			 *
			 * @since 4.7.0
			 * @hook latepoint_notifications_send_sms
			 * @returns {array} The array of descriptive data, possibly transformed by hooked SMS processor(s)
			 */
			$result = apply_filters( 'latepoint_notifications_send_sms', $result, $to, $content );
		} else {
			$result['message']  = __( 'SMS notifications are disabled', 'latepoint' );
			$result['errors'][] = __( 'SMS notifications are disabled', 'latepoint' );
		}

		self::log_sms( $result );

		return $result;
	}

	/**
	 * @param $enabled_only
	 *
	 * @return array [
	 *   'code' => [
	 *      'code' => string,
	 *      'label' => string,
	 *      'image_url' => string
	 *   ]
	 * ]
	 */
	public static function get_sms_processors( $enabled_only = false ) {
		$sms_processors = [];

		/**
		 * Get the list of SMS processors registered in the LatePoint ecosystem
		 *
		 * @since 1.2.3
		 * @hook latepoint_sms_processors
		 *
		 * @param {array} $sms_processors The list of SMS processors being filtered
		 * @param {bool} $enabled_only True when filtering only enabled SMS processors, false otherwise
		 * @returns {array} The filtered list of SMS processors
		 */
		return apply_filters( 'latepoint_sms_processors', $sms_processors, $enabled_only );
	}

	public static function is_sms_processor_enabled( string $sms_processor_code ): bool {
		return ( OsNotificationsHelper::get_selected_processor_code_by_type( 'sms' ) == $sms_processor_code );
	}

	/**
	 * @param array $result
	 *
	 * @return OsActivityModel
	 */
	public static function log_sms( array $result ) {
		if ( empty( $result['processed_datetime'] ) ) {
			$result['processed_datetime'] = OsTimeHelper::now_datetime_in_db_format();
		}
		$data = [
			'code'        => 'sms_sent',
			'description' => wp_json_encode( $result ),
		];
		if ( ! empty( $result['extra_data']['activity_data'] ) ) {
			$data = array_merge( $data, $result['extra_data']['activity_data'] );
		}
		$activity = OsActivitiesHelper::create_activity( $data );
		return $activity;
	}
}
