<?php if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

/**
 * Class MC4WP_Ninja_Forms_Action
 */
final class MC4WP_Ninja_Forms_Action extends NF_Abstracts_ActionNewsletter {

	/**
	 * @var string
	 */
	protected $_name = 'mc4wp_subscribe';

	/**
	 * Constructor
	 */
	public function __construct() {
		parent::__construct();

		$this->_nicename = __( 'Mailchimp', 'mailchimp-for-wp' );
		$prefix          = $this->get_name();

		unset( $this->_settings[ $prefix . 'newsletter_list_groups' ] );

		$this->_settings['double_optin'] = array(
			'name'    => 'double_optin',
			'type'    => 'select',
			'label'   => __( 'Use double opt-in?', 'mailchimp-for-wp' ),
			'width'   => 'full',
			'group'   => 'primary',
			'value'   => 1,
			'options' => array(
				array(
					'value' => 1,
					'label' => 'Yes',
				),
				array(
					'value' => 0,
					'label' => 'No',
				),
			),
		);

		$this->_settings['update_existing'] = array(
			'name'    => 'update_existing',
			'type'    => 'select',
			'label'   => __( 'Update existing subscribers?', 'mailchimp-for-wp' ),
			'width'   => 'full',
			'group'   => 'primary',
			'value'   => 0,
			'options' => array(
				array(
					'value' => 1,
					'label' => 'Yes',
				),
				array(
					'value' => 0,
					'label' => 'No',
				),
			),
		);

		//        $this->_settings[ 'replace_interests' ] = array(
		//            'name' => 'replace_interests',
		//            'type' => 'select',
		//            'label' => __( 'Replace existing interest groups?', 'mailchimp-for-wp'),
		//            'width' => 'full',
		//            'group' => 'primary',
		//            'value' => 0,
		//            'options' => array(
		//                array(
		//                    'value' => 1,
		//                    'label' => 'Yes',
		//                ),
		//                array(
		//                    'value' => 0,
		//                    'label' => 'No',
		//                ),
		//            ),
		//        );
	}

	/*
	* PUBLIC METHODS
	*/

	public function save( $action_settings ) {
	}

	public function process( $action_settings, $form_id, $data ) {
		if ( empty( $action_settings['newsletter_list'] ) || empty( $action_settings['EMAIL'] ) ) {
			return;
		}

		// find "mc4wp_optin" type field, bail if not checked.
		foreach ( $data['fields'] as $field_data ) {
			if ( $field_data['type'] === 'mc4wp_optin' && empty( $field_data['value'] ) ) {
				return;
			}
		}

		$list_id       = $action_settings['newsletter_list'];
		$email_address = $action_settings['EMAIL'];
		$mailchimp     = new MC4WP_MailChimp();

		$merge_fields = $mailchimp->get_list_merge_fields( $list_id );
		foreach ( $merge_fields as $merge_field ) {
			if ( ! empty( $action_settings[ $merge_field->tag ] ) ) {
				$merge_fields[ $merge_field->tag ] = $action_settings[ $merge_field->tag ];
			}
		}

		$double_optin      = (int) $action_settings['double_optin'] !== 0;
		$update_existing   = (int) $action_settings['update_existing'] === 1;
		$replace_interests = isset( $action_settings['replace_interests'] ) && (int) $action_settings['replace_interests'] === 1;

		do_action( 'mc4wp_integration_ninja_forms_subscribe', $email_address, $merge_fields, $list_id, $double_optin, $update_existing, $replace_interests, $form_id );
	}

	protected function get_lists() {
		$mailchimp = new MC4WP_MailChimp();

		/** @var array $lists */
		$lists  = $mailchimp->get_lists();
		$return = array();

		foreach ( $lists as $list ) {
			$list_fields = array();

			foreach ( $mailchimp->get_list_merge_fields( $list->id ) as $merge_field ) {
				$list_fields[] = array(
					'value' => $merge_field->tag,
					'label' => $merge_field->name,
				);
			}

			// TODO: Add support for groups once base class supports this.

			$return[] = array(
				'value'  => $list->id,
				'label'  => $list->name,
				'fields' => $list_fields,
			);
		}

		return $return;
	}
}
