<?php
/**
 * WPForms Save class.
 *
 * @since 2.9.0
 *
 * @package OMAPI
 * @author  Eduardo Nakatsuka
 */

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

/**
 * WPForms Save class.
 *
 * @since 2.9.0
 */
class OMAPI_WPForms_Save {

	/**
	 * Holds the class object.
	 *
	 * @since 2.9.0
	 *
	 * @var OMAPI_WPForms_Save
	 */
	public static $instance;

	/**
	 * Holds save error.
	 *
	 * @since 2.9.0
	 *
	 * @var mixed
	 */
	public $error = null;

	/**
	 * Holds the base class object.
	 *
	 * @since 2.9.0
	 *
	 * @var OMAPI
	 */
	public $base;

	/**
	 * Primary class constructor.
	 *
	 * @since 2.9.0
	 */
	public function __construct() {
		$this->base = OMAPI::get_instance();
	}

	/**
	 * Helper method to handle connecting WPForms to OptinMonster.
	 *
	 * @since 2.9.0
	 *
	 * @return void
	 */
	public function connect() {
		$this->updateConnection();
	}

	/**
	 * Helper method to handle disconnecting WPForms to OptinMonster.
	 *
	 * @since 2.9.0
	 *
	 * @return void
	 */
	public function disconnect() {
		$this->updateConnection( false );
	}

	/**
	 * Handles connecting or disconnecting WPForms to OptinMonster.
	 *
	 * @since 2.9.0
	 *
	 * @return void
	 */
	public function updateConnection( $connect = true ) {
		$creds = $this->base->get_api_credentials();

		if ( empty( $creds['apikey'] ) && empty( $creds['user'] ) && empty( $creds['key'] ) ) {
			return;
		}

		// Make a connection request.
		$action = $connect ? 'connect' : 'disconnect';
		$api    = new OMAPI_Api( 'wpforms/' . $action, $creds, 'POST', 'v2' );

		$data = array(
			'homeUrl'  => esc_url_raw( home_url() ),
			'adminUrl' => esc_url_raw( get_admin_url() ),
		);

		$response = $api->request( $data );

		if ( is_wp_error( $response ) ) {
			$message = $connect
				? esc_html__( 'WPForms could not be connected to OptinMonster. The OptinMonster API returned with the following response: %s', 'optin-monster-api' )
				: esc_html__( 'WPForms could not be disconnected from OptinMonster. The OptinMonster API returned with the following response: %s', 'optin-monster-api' );

			$this->error = sprintf( $message, $response->get_error_message() );
		}
	}
}
