<?php

class MC4WP_Admin_Ajax {

	/**
	 * @var MC4WP_Admin_Tools
	 */
	protected $tools;

	/**
	 * MC4WP_Admin_Ajax constructor.
	 *
	 * @param MC4WP_Admin_Tools $tools
	 */
	public function __construct( MC4WP_Admin_Tools $tools ) {
		$this->tools = $tools;
	}

	/**
	 * Hook AJAX actions
	 */
	public function add_hooks() {
		add_action( 'wp_ajax_mc4wp_renew_mailchimp_lists', array( $this, 'refresh_mailchimp_lists' ) );
		add_action( 'wp_ajax_mc4wp_get_list_details', array( $this, 'get_list_details' ) );
	}

	/**
	 * Empty lists cache & fetch lists again.
	 */
	public function refresh_mailchimp_lists() {
		if ( ! $this->tools->is_user_authorized() ) {
			wp_send_json_error();
			return;
		}

		check_ajax_referer( 'mc4wp-ajax' );

		$mailchimp = new MC4WP_MailChimp();
		$success   = $mailchimp->refresh_lists();
		wp_send_json( $success );
	}

	/**
	 * Retrieve details (merge fields and interest categories) for one or multiple lists in Mailchimp
	 * @throws MC4WP_API_Exception
	 */
	public function get_list_details() {
		if ( ! $this->tools->is_user_authorized() ) {
			wp_send_json_error();
			return;
		}

		$list_ids  = (array) explode( ',', $_GET['ids'] );
		$data      = array();
		$mailchimp = new MC4WP_MailChimp();
		foreach ( $list_ids as $list_id ) {
			$data[] = (object) array(
				'id'                  => $list_id,
				'merge_fields'        => $mailchimp->get_list_merge_fields( $list_id ),
				'interest_categories' => $mailchimp->get_list_interest_categories( $list_id ),
				'marketing_permissions' => $mailchimp->get_list_marketing_permissions( $list_id ),
			);
		}

		if ( isset( $_GET['format'] ) && $_GET['format'] === 'html' ) {
			$merge_fields = $data[0]->merge_fields;
			$interest_categories = $data[0]->interest_categories;
			$marketing_permissions = $data[0]->marketing_permissions;
			require MC4WP_PLUGIN_DIR . '/includes/views/parts/lists-overview-details.php';
		} else {
			wp_send_json( $data );
		}
		exit;
	}
}
