<?php
/**
 * Icon manager migartion class.
 *
 * @package Divi
 * @subpackage Builder
 * @since ?
 */

/**
 * Migration process to handle all the changes done in Icon Manager QF.
 *
 * @since ?
 */
class ET_Builder_Module_Settings_Migration_IconManager extends ET_Builder_Module_Settings_Migration {

	/**
	 * Migration Version.
	 *
	 * @var string
	 */
	public $version = '4.13.0';

	/**
	 * Proccessing field name.
	 *
	 * @var string
	 */
	private $_field_name;

	/**
	 * Current field value.
	 *
	 * @var string
	 */
	private $_current_value;

	/**
	 * Saved field value.
	 *
	 * @var string
	 */
	private $_saved_value;

	/**
	 * Current field name.
	 *
	 * @var string
	 */
	private $_saved_field_name;

	/**
	 * Array of attributes.
	 *
	 * @var array
	 */
	private $_attrs;

	/**
	 * All responsive modes suffixes.
	 *
	 * @var array
	 */
	private $_responsive_modes_suffixes = array( '', '_tablet', '_phone', '__hover', '__hover_enabled', '_last_edited' );

	/**
	 * Responsive modes.
	 *
	 * @var array
	 */
	private $_responsive_modes = array( '', '_tablet', '_phone' );

	/**
	 * Default values for the fields related to icon placement migration.
	 *
	 * @var array
	 */
	private $_icon_placement_migration_values = array(
		'image_icon_width'          => array(
			'left' => '16px',
			'top'  => '48px',
		),
		'image_icon_custom_padding' => array(
			'left' => '8px|8px|8px|8px|false|false',
			'top'  => '25px|25px|25px|25px|false|false',
		),
		'border_width_all_image'    => array(
			'left' => '2px',
			'top'  => '3px',
		),
	);

	/**
	 * Border radii value for the circle icon attr migration.
	 *
	 * @var string
	 */
	private $_circle_border_radii_value = 'on|100%|100%|100%|100%';

	/**
	 * Attrs sticky suffixes.
	 *
	 * @var array
	 */
	private $_sticky_suffixes = array( '__sticky_enabled', '__sticky' );

	/**
	 * Get array with Blurb module slug.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_blurb_modules() {
		return et_pb_get_font_icon_modules( 'blurb' );
	}

	/**
	 * Returns the list of Divi modules with buttons that have a custom icons.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_button_modules() {
		return et_pb_get_font_icon_modules( 'button' );
	}

	/**
	 * Get array with slugs for modules that supported Hover Overlay functionality.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_overlay_modules() {
		return et_pb_get_font_icon_modules( 'overlay' );
	}

	/**
	 * Get array with slugs for modules that supported Toggle Icon functionality.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_toggle_modules() {
		return et_pb_get_font_icon_modules( 'toggle' );
	}

	/**
	 * Get Blurb fields.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_blurb_fields() {

		// The order of the array keys and the order of the field names in the values is important when
		// executing the migration logic, since it uses the "return early" principle.
		if ( parent::$_maybe_global_presets_migration ) {
			// Migrations rules for the Global Presets migrations case.
			$migration_options = array(
				'icon_font_size'         => array( 'image_icon_width' ),
				'border_color_all_image' => array( 'border_color_all_image' ),
				'border_width_all_image' => array( 'border_width_all_image' ),
				'font_icon'              => array( 'font_icon' ),
				'image_max_width'        => array( 'image_icon_width' ),
				'circle_border_color'    => array( 'border_color_all_image' ),
				'circle_color'           => array( 'image_icon_background_color' ),
				'use_circle_border'      => array( 'border_color_all_image' ),
				'use_circle'             => array( 'image_icon_custom_padding', 'border_color_all_image', 'border_radii_image', 'image_icon_background_color', 'border_width_all_image' ),
				'icon_placement'         => array( 'image_icon_width', 'border_width_all_image' ),
			);
		} else {
			$migration_options = array(
				'icon_font_size'         => array( 'image_icon_width' ),
				'border_color_all_image' => array( 'border_color_all_image' ),
				'border_width_all_image' => array( 'border_width_all_image' ),
				'font_icon'              => array( 'font_icon' ),
				'image_max_width'        => array( 'image_icon_width' ),
				'circle_border_color'    => array( 'border_color_all_image' ),
				'circle_color'           => array( 'image_icon_background_color' ),
				'use_circle_border'      => array( 'border_color_all_image' ),
				'use_circle'             => array( 'border_color_all_image', 'border_radii_image', 'image_icon_background_color', 'border_width_all_image' ),
				'icon_placement'         => array( 'image_icon_width', 'image_icon_custom_padding', 'border_width_all_image' ),
			);
		}

		$sticky_options = array( 'circle_color', 'circle_border_color', 'image_max_width', 'icon_font_size' );

		$result_fields_keys = array();

		$modes_with_sticky = array_merge( $this->_responsive_modes_suffixes, $this->_sticky_suffixes );

		foreach ( $migration_options as $saved_field_name => $field_names ) {
			foreach ( $modes_with_sticky as $mode_suffix ) {

				$maybe_border_width_all_image_saved_field = 'border_width_all_image' === $saved_field_name && in_array( $mode_suffix, array( '__hover', '__hover_enabled' ), true );
				$maybe_use_circle_border_saved_field      = 'use_circle_border' === $saved_field_name && in_array( $mode_suffix, array( '_tablet', '_phone', '__hover', '__hover_enabled', '_last_edited' ), true );
				$maybe_use_circle_responsive              = 'use_circle' === $saved_field_name && '' !== $mode_suffix;
				$maybe_icon_placement_in_hover            = 'icon_placement' === $saved_field_name && in_array( $mode_suffix, array( '__hover', '__hover_enabled' ), true );
				$maybe_not_sticky_option_when_sticky_mode = in_array( $mode_suffix, $this->_sticky_suffixes, true ) && ! in_array( $saved_field_name, $sticky_options, true );

				if ( $maybe_icon_placement_in_hover || $maybe_border_width_all_image_saved_field || $maybe_use_circle_border_saved_field || $maybe_use_circle_responsive || $maybe_not_sticky_option_when_sticky_mode ) {
					continue;
				}
				foreach ( $field_names as $field_name ) {
					$affected_fields = 'use_circle' === $saved_field_name ? array( $saved_field_name => $this->_get_blurb_modules() ) : array( $saved_field_name . $mode_suffix => $this->_get_blurb_modules() );
					if ( ! empty( $result_fields_keys[ $field_name . $mode_suffix ]['affected_fields'] ) ) {
						$affected_fields += $result_fields_keys[ $field_name . $mode_suffix ]['affected_fields'];
					};

					$result_fields_keys[ $field_name . $mode_suffix ] = array(
						'affected_fields' => $affected_fields,
					);
				}
			}
		}

		return $result_fields_keys;
	}

	/**
	 * Get fields for modules with Button support.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_button_fields() {
		$result_button_fields          = array();
		$button_field_names_for_module = array(
			'et_pb_fullwidth_header' => array( 'button_one_icon', 'button_two_icon' ),
			'one_button_modules'     => array( 'button_icon' ),
		);
		foreach ( $button_field_names_for_module as $field_module => $field_names ) {
			foreach ( $field_names as $field_name ) {
				foreach ( $this->_responsive_modes as $mode_suffix ) {
					$modules                                  = 'et_pb_fullwidth_header' === $field_module ? array( 'et_pb_fullwidth_header' ) : array_diff( $this->_get_button_modules(), array( 'et_pb_fullwidth_header' ) );
					$full_field_name                          = $field_name . $mode_suffix;
					$result_button_fields[ $full_field_name ] = array(
						'affected_fields' => array( $full_field_name => $modules ),
					);
				}
			}
		}

		return $result_button_fields;
	}


	/**
	 * Get modules which are using overlay functionality by responsive suffix.
	 *
	 * @since ?
	 * @param string $suffix responsive suffix.
	 *
	 * @return array
	 */
	private function _get_overlay_modules_by_suffix( $suffix ) {
		return '' === $suffix ? $this->_get_overlay_modules() : array_filter(
			$this->_get_overlay_modules(),
			function( $module ) {
				return 'et_pb_filterable_portfolio' !== $module;
			}
		);
	}

	/**
	 * Get fields for modules with Hover Overlay functionality.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_overlay_fields() {
		$result_overlay_fields = array();
		foreach ( $this->_responsive_modes as $mode_suffix ) {
			$full_field_name                           = 'hover_icon' . $mode_suffix;
			$modules                                   = $this->_get_overlay_modules_by_suffix( $mode_suffix );
			$result_overlay_fields[ $full_field_name ] = array(
				'affected_fields' => array( $full_field_name => $modules ),
			);
		}
		return $result_overlay_fields;
	}

	/**
	 * Get fields for modules with Toggle icon functionality.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	private function _get_toggle_fields() {
		$result_overlay_fields = array();
		$toggle_icon_fields    = array( 'use_icon_font_size', 'icon_color', 'icon_font_size' );
		foreach ( $toggle_icon_fields as $toggle_icon_field ) {
			foreach ( $this->_responsive_modes_suffixes as $mode_suffix ) {
				if ( 'use_icon_font_size' === $toggle_icon_field && '' !== $mode_suffix ) {
					continue;
				}
				$full_field_name = $toggle_icon_field . $mode_suffix;
				$modules         = $this->_get_toggle_modules();
				$result_overlay_fields[ 'open_' . $full_field_name ] = array(
					'affected_fields' => array( $full_field_name => $modules ),
				);
			}
		}
		return $result_overlay_fields;
	}

	/**
	 * Get all affected fields.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	public function get_fields() {
		return array_merge( $this->_get_blurb_fields(), $this->_get_button_fields(), $this->_get_overlay_fields(), $this->_get_toggle_fields() );
	}

	/**
	 * Get all affected modules.
	 *
	 * @since ?
	 *
	 * @return array
	 */
	public function get_modules() {
		return array_merge( $this->_get_blurb_modules(), $this->_get_overlay_modules(), $this->_get_button_modules(), $this->_get_toggle_modules() );
	}

	/**
	 * Base migrate method, which launching during migration.
	 *
	 * @since ?
	 *
	 * @param string $field_name field name.
	 * @param string $current_value current value.
	 * @param string $module_slug module slug.
	 * @param string $saved_value saved value.
	 * @param string $saved_field_name saved field name.
	 * @param array  $attrs attrs array.
	 * @param string $content content.
	 * @param string $module_address module_address.
	 *
	 * @return array
	 */
	public function migrate( $field_name, $current_value, $module_slug, $saved_value, $saved_field_name, $attrs, $content, $module_address ) {
		// Initialize migration params from received args.
		$this->_init_params( $field_name, $current_value, $saved_value, $saved_field_name, $attrs );

		// For the non Blurb modules we only migarte `font_icon` option.
		if ( ! in_array( $module_slug, $this->_get_blurb_modules(), true ) ) {
			// Simple migrate filed names for toggle icons.
			if ( in_array( $module_slug, $this->_get_toggle_modules(), true ) ) {
				return $current_value;
			}
			return $this->_migrate_font_icon();
		}

		// Run different scripts depending on the type of migration.
		return ( parent::$_maybe_global_presets_migration ) ? $this->_blurb_global_presets_attrs_migration() : $this->_blurb_post_attrs_migration();
	}

	/**
	 * Initialize migration params from received args.
	 *
	 * @since ?
	 *
	 * @param string $field_name field_name.
	 * @param string $current_value current_value.
	 * @param string $saved_value saved_value.
	 * @param string $saved_field_name saved_field_name.
	 * @param string $attrs attrs.
	 *
	 * @return void
	 */
	private function _init_params( $field_name, $current_value, $saved_value, $saved_field_name, $attrs ) {
		$this->_field_name       = $field_name;
		$this->_current_value    = $current_value;
		$this->_saved_value      = $saved_value;
		$this->_saved_field_name = $saved_field_name;
		$this->_attrs            = $attrs;
	}

	/**
	 * Check if an passed attribute is an on\off type via its name.
	 *
	 * @since ?
	 *
	 * @param string $attr_name attribute name.
	 *
	 * @return bool
	 */
	private function _maybe_on( $attr_name ) {
		return ! empty( $this->_attrs[ $attr_name ] ) && 'on' === ( $this->_attrs[ $attr_name ] );
	}

	/**
	 * Check if current migrated `field_name` contains passed attribute name.
	 *
	 * @since ?
	 *
	 * @param string $attr_name attribute name.
	 * @return bool
	 */
	private function _field_name_contains( $attr_name ) {
		return false !== strpos( $this->_field_name, $attr_name );
	}

	/**
	 * Check if current migrated `saved_name` contains passed attribute name.
	 *
	 * @since ?
	 *
	 * @param string $attr_name attr_name.
	 * @return bool
	 */
	private function _saved_name_contains( $attr_name ) {
		return false !== strpos( $this->_saved_field_name, $attr_name );
	}

	/**
	 * Get current migrated field name suffix.
	 *
	 * @param bool $use_sticky_suffixes use or not sticky_suffixes.
	 * @since ?
	 *
	 * @return string
	 */
	private function _get_field_suffix( $use_sticky_suffixes = false ) {
		$suffixes = $use_sticky_suffixes ? array_merge( $this->_sticky_suffixes, array_reverse( $this->_responsive_modes_suffixes ) ) : array_reverse( $this->_responsive_modes_suffixes );
		array_pop( $suffixes );
		foreach ( $suffixes as $suffix ) {
			if ( $this->_field_name_contains( $suffix ) ) {
				return $suffix;
			}
		}
		return '';
	}

	/**
	 * Get current migrated field name without suffix.
	 *
	 * @since ?
	 *
	 * @return string
	 */
	private function _get_field_name_without_suffix() {
		return str_replace( $this->_get_field_suffix(), '', $this->_field_name );
	}

	/**
	 * Migrate fields value "as is" if the current field is one of the
	 * service fields ( fields with suffix '__hover_enabled' or '_last_edited' ) or sticky fields.
	 *
	 * @since ?
	 *
	 * @return bool
	 */
	private function _maybe_service_or_sticky_field() {
		$service_suffixes = array_merge( $this->_sticky_suffixes, array( '__hover_enabled', '_last_edited' ) );
		return in_array( $this->_get_field_suffix( true ), $service_suffixes, true ) && ! empty( $this->_current_value );
	}

	/**
	 * Returns an attribute value from by attribute's name.
	 *
	 * @since ?
	 *
	 * @param string $attr_name attribute name.
	 * @return bool
	 */
	private function _get_attr( $attr_name ) {
		return ! empty( $this->_attrs[ $attr_name ] ) ? $this->_attrs[ $attr_name ] : '';
	}

	/**
	 * Migrate fields which depends on the icon placement option.
	 *
	 * @since ?
	 *
	 * @param string $for_empty_current_value setting returned value for empty icon_placement.
	 * @return string
	 */
	private function _migrate_icon_placement( $for_empty_current_value = '' ) {
		$result_values                = $this->_icon_placement_migration_values[ $this->_get_field_name_without_suffix() ];
		$result_values['']            = $for_empty_current_value;
		$current_icon_placement_value = $this->_get_attr( 'icon_placement' . $this->_get_field_suffix() );
		if ( '' === $this->_get_field_suffix() || ! empty( $current_icon_placement_value ) ) {
			return $result_values[ $current_icon_placement_value ];
		}
		return '';
	}

	/**
	 * Migrate background color with circle color.
	 *
	 * @since ?
	 *
	 * @return string
	 */
	private function _migrate_background_color_with_circle_color() {

		if ( empty( $this->_current_value ) && '' === $this->_get_field_suffix() ) {
			return et_builder_accent_color();
		}

		return $this->_current_value;
	}

	/**
	 * Migrate font icon.
	 *
	 * @since ?
	 *
	 * @return string
	 */
	private function _migrate_font_icon() {
		if ( empty( $this->_current_value ) ) {
			return '';
		}

		return et_pb_build_extended_font_icon_value( $this->_current_value );
	}

	/**
	 * Run Blurb's attributes migration when post's shortcodes attributes migrating.
	 *
	 * @since ?
	 *
	 * @return string
	 */
	private function _blurb_post_attrs_migration() {
		// Determine the conditions for the migration of various options.
		$is_icon_mode                                      = $this->_maybe_on( 'use_icon' );
		$maybe_set_border_color_all_image_as_is            = ! $is_icon_mode && $this->_field_name_contains( 'border_color_all_image' ) && ! empty( $this->_attrs[ $this->_field_name ] );
		$_migrate_font_icon                                = $is_icon_mode && $this->_field_name_contains( 'font_icon' ) && ! $this->_field_name_contains( '__hover_enabled' ) && ! $this->_field_name_contains( '_last_edited' );
		$migrate_border_radii_image                        = $is_icon_mode && $this->_field_name_contains( 'border_radii_image' ) && $this->_maybe_on( 'use_circle' );
		$migrate_image_icon_custom_padding                 = $is_icon_mode && $this->_field_name_contains( 'image_icon_custom_padding' ) && $this->_maybe_on( 'use_circle' );
		$migrate_border_width_all_image_as_is              = $this->_field_name_contains( 'border_width_all_image' ) && $this->_saved_name_contains( 'border_width_all_image' );
		$migrate_border_width_all_image_with_circle_border = $is_icon_mode && $this->_field_name_contains( 'border_width_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
		$migrate_border_color_all_image                    = ! $maybe_set_border_color_all_image_as_is && $is_icon_mode && $this->_field_name_contains( 'border_color_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
		$migrate_image_icon_width_with_circle              = $is_icon_mode && $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_placement' ) && $this->_maybe_on( 'use_circle' );
		$migrate_icon_font_size_as_is                      = $is_icon_mode && $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_font_size' ) && ! empty( $this->_current_value );
		$_migrate_background_color_with_circle_color       = $is_icon_mode && $this->_field_name_contains( 'image_icon_background_color' ) && $this->_saved_name_contains( 'circle_color' ) && $this->_maybe_on( 'use_circle' );
		$maybe_return_default_accent_color_for_default_border = empty( $this->_get_attr( 'circle_border_color' ) ) && empty( $this->_get_attr( 'circle_border_color' . $this->_get_field_suffix() ) ) && empty( $this->_get_attr( 'border_color_all_image' ) ) && empty( $this->_get_attr( 'border_color_all_image' . $this->_get_field_suffix() ) );
		$migrate_image_max_width_as_is                        = ! $is_icon_mode && $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'image_max_width' );

		if ( $this->_maybe_service_or_sticky_field() ) {
			return $this->_current_value;
		}

		if ( $maybe_set_border_color_all_image_as_is && ! empty( $this->_saved_value ) ) {
			return $this->_saved_value;
		}

		if ( $migrate_icon_font_size_as_is ) {
			return $this->_current_value;
		}

		if ( $_migrate_background_color_with_circle_color ) {
			return $this->_migrate_background_color_with_circle_color();
		}

		if ( $migrate_image_icon_width_with_circle ) {
			return $this->_migrate_icon_placement();
		}

		if ( $migrate_border_color_all_image && $maybe_return_default_accent_color_for_default_border ) {
			return et_builder_accent_color();
		}

		if ( $_migrate_font_icon ) {
			return $this->_migrate_font_icon();
		}

		if ( $migrate_border_radii_image ) {
			return $this->_circle_border_radii_value;
		}

		if ( $migrate_image_icon_custom_padding ) {
			return $this->_migrate_icon_placement();
		}

		if ( $migrate_border_width_all_image_with_circle_border ) {
			return $this->_migrate_icon_placement( $this->_icon_placement_migration_values['border_width_all_image']['top'] );
		}

		if ( $migrate_border_width_all_image_as_is && $is_icon_mode ) {
			return in_array( $this->_saved_value, $this->_icon_placement_migration_values['border_width_all_image'], true ) ? $this->_saved_value : '';
		}

		if ( $migrate_border_color_all_image ) {
			return $this->_current_value;
		}

		if ( $migrate_image_max_width_as_is ) {
			return $this->_current_value;
		}

		return $this->_saved_value;
	}

	/**
	 * Run Blurb's attributes migration when Global Presets attributes migrating.
	 *
	 * @since ?
	 *
	 * @return string
	 */
	private function _blurb_global_presets_attrs_migration() {
		// Determine the conditions for the migration of various options.
		$_migrate_font_icon                                = $this->_field_name_contains( 'font_icon' ) && ! $this->_field_name_contains( '__hover_enabled' ) && ! $this->_field_name_contains( '_last_edited' );
		$migrate_border_radii_image                        = $this->_field_name_contains( 'border_radii_image' ) && $this->_maybe_on( 'use_circle' );
		$migrate_image_icon_custom_padding                 = $this->_field_name_contains( 'image_icon_custom_padding' ) && $this->_maybe_on( 'use_circle' );
		$migrate_border_width_all_image_as_is              = $this->_field_name_contains( 'border_width_all_image' ) && $this->_saved_name_contains( 'border_width_all_image' );
		$migrate_border_width_all_image_with_circle_border = ! $migrate_border_width_all_image_as_is && $this->_field_name_contains( 'border_width_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
		$migrate_no_border_width_all_image_field           = ! $migrate_border_width_all_image_with_circle_border && $this->_field_name_contains( 'border_width_all_image' ) && $this->_maybe_on( 'use_circle' );
		$migrate_border_color_all_image                    = $this->_field_name_contains( 'border_color_all_image' ) && $this->_maybe_on( 'use_circle' ) && $this->_maybe_on( 'use_circle_border' );
		$migrate_image_icon_width_with_circle              = $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_placement' ) && $this->_maybe_on( 'use_circle' );
		$migrate_icon_font_size_as_is                      = $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'icon_font_size' ) && ! empty( $this->_current_value );
		$_migrate_background_color_with_circle_color       = $this->_field_name_contains( 'image_icon_background_color' ) && $this->_saved_name_contains( 'circle_color' ) && $this->_maybe_on( 'use_circle' );
		$migrate_default_background_color                  = ! $_migrate_background_color_with_circle_color && $this->_field_name_contains( 'image_icon_background_color' ) && $this->_maybe_on( 'use_circle' );
		$maybe_return_accent_color_for_default_border      = empty( $this->_attrs[ 'circle_border_color' . $this->_get_field_suffix() ] ) && in_array( $this->_get_field_suffix(), array( '', '_tablet', '_phone', '__hover' ), true );
		$migrate_circle_border_color_as_is                 = $this->_field_name_contains( 'border_color_all_image' ) && $this->_saved_name_contains( 'circle_border_color' ) && ! empty( $this->_current_value );
		$migrate_image_max_width_as_is                     = $this->_field_name_contains( 'image_icon_width' ) && $this->_saved_name_contains( 'image_max_width' );

		if ( $this->_maybe_service_or_sticky_field() ) {
			return $this->_current_value;
		}

		if ( $migrate_icon_font_size_as_is ) {
			return $this->_current_value;
		}

		if ( $migrate_default_background_color ) {
			return et_builder_accent_color();
		}

		if ( $_migrate_background_color_with_circle_color ) {
			return $this->_migrate_background_color_with_circle_color();
		}

		if ( $migrate_image_icon_width_with_circle ) {
			return $this->_migrate_icon_placement();
		}

		if ( $migrate_border_color_all_image && $maybe_return_accent_color_for_default_border ) {
			return et_builder_accent_color();
		}

		if ( $_migrate_font_icon ) {
			return $this->_migrate_font_icon();
		}

		if ( $migrate_border_radii_image ) {
			return $this->_circle_border_radii_value;
		}

		if ( $migrate_image_icon_custom_padding ) {
			return $this->_migrate_icon_placement( $this->_icon_placement_migration_values['image_icon_custom_padding']['top'] );
		}

		if ( $migrate_border_width_all_image_with_circle_border ) {
			return $this->_migrate_icon_placement( $this->_icon_placement_migration_values['border_width_all_image']['top'] );
		}

		if ( $migrate_no_border_width_all_image_field ) {
			return in_array( $this->_saved_value, $this->_icon_placement_migration_values['border_width_all_image'], true ) ? $this->_saved_value : '';
		}

		if ( $migrate_border_color_all_image || $migrate_circle_border_color_as_is ) {
			return $this->_current_value;
		}

		if ( $migrate_image_max_width_as_is ) {
			return $this->_current_value;
		}

		return $this->_saved_value;
	}
}

return new ET_Builder_Module_Settings_Migration_IconManager();
