<?php

// Meta Fields
function porto_block_meta_fields() {
	$fields = array();
	global $post;
	$builder_type = '';

	if ( $post ) {
		$builder_type = get_post_meta( $post->ID, 'porto_builder_type', true );
	}

	if ( $post && $post->ID && 'porto_builder' == $post->post_type && 'block' != $builder_type && 'type' != $builder_type ) {
		$fields['condition'] = array(
			'name'  => 'condition',
			'title' => __( 'Display Condition', 'porto-functionality' ),
			'desc'  => __( '<span style="color: red;">Set the conditions that determine where your Template is used throughout your site.</span>', 'porto-functionality' ),
			'type'  => 'button',
			'value' => __( 'Set Condition', 'porto-functionality' ),
		);
		if ( 'header' == $builder_type ) {
			$fields['header_type'] = array(
				'name'    => 'header_type',
				'title'   => __( 'Header Type', 'porto-functionality' ),
				'desc'    => sprintf( __( 'After changed, you should save theme options in the redux panel. You can change %1$sSide Header Position%2$s value in theme option.', 'porto-functionality' ), '<a href="' . porto_get_theme_option_url( 'header-side-position' ) . '" target="_blank">', '</a>' ),
				'type'    => 'select',
				'default' => '',
				'options' => array(
					'default'  => __( 'Default', 'porto-functionality' ),
					'absolute' => __( 'Absolute(Fixed) Header', 'porto-functionality' ),
					'side'     => __( 'Side Header', 'porto-functionality' ),
				),
			);
			$fields['header_side_pos'] = array(
				'name'    => 'header_side_pos',
				'title'   => __( 'Side Header Position', 'porto-functionality' ),
				'type'    => 'select',
				'options' => array(
					''      => __( 'Left (Right on RTL)', 'porto-functionality' ),
					'right' => __( 'Right (Left on RTL)', 'porto-functionality' ),
				),
				'required' => array(
					'name'  => 'header_type',
					'value' => 'side',
				),
			);
			$fields['header_side_width'] = array(
				'name'    => 'header_side_width',
				'title'   => __( 'Side Header Width (e.g: 255)px', 'porto-functionality' ),
				'desc'    => __( 'Please input the only number of Side Header Width. After changed, you should save theme options in the redux panel.', 'porto-functionality' ),
				'type'    => 'text',
				'required' => array(
					'name'  => 'header_type',
					'value' => 'side',
				),
			);
		} elseif ( 'product' == $builder_type ) {
			$fields['disable_sticky_sidebar'] = array(
				'name'  => 'disable_sticky_sidebar',
				'title' => __( 'Disable Sticky Sidebar', 'porto-functionality' ),
				'type'  => 'checkbox',
				'desc'  => sprintf( __( 'You can change %1$sglobal%2$s value in theme option.', 'porto-functionality' ), '<a href="' . porto_get_theme_option_url( 'sticky-sidebar' ) . '" target="_blank">', '</a>' ),
			);
		} elseif ( 'popup' == $builder_type && ( ! defined( 'VCV_VERSION' ) && ! defined( 'ELEMENTOR_VERSION' ) ) ) {
			$fields['popup_type'] = array(
				'name'    => 'popup_type',
				'title'   => __( 'Popup Type', 'porto-functionality' ),
				'type'    => 'select',
				'options' => array(
					''          => __( 'Modal', 'porto-functionality' ),
					'offcanvas' => __( 'Off-Canvas', 'porto-functionality' ),
				),
			);
			$fields['popup_offcanvas_pos'] = array(
				'name'    => 'popup_offcanvas_pos',
				'title'   => __( 'Position', 'porto-functionality' ),
				'type'    => 'select',
				'options' => array(
					''      => __( 'Left (Right on RTL)', 'porto-functionality' ),
					'right' => __( 'Right (Left on RTL)', 'porto-functionality' ),
				),
				'required' => array(
					'name'  => 'popup_type',
					'value' => 'offcanvas',
				),
			);
			$fields['popup_offcanvas_bg'] = array(
				'name'    => 'popup_offcanvas_bg',
				'title'   => __( 'Background Color', 'porto-functionality' ),
				'type'  => 'color',
			);
			$fields['popup_width']     = array(
				'name'    => 'popup_width',
				'title'   => __( 'Popup Width (px)', 'porto-functionality' ),
				'type'    => 'text',
				'default' => '740',
			);
			$fields['popup_animation'] = array(
				'name'    => 'popup_animation',
				'title'   => __( 'Popup Animation', 'porto-functionality' ),
				'type'    => 'select',
				'default' => 'mfp-fade',
				'options' => array(
					'mfp-fade'       => __( 'Fade', 'porto-functionality' ),
					'my-mfp-zoom-in' => __( 'Zoom in', 'porto-functionality' ),
				),
				'required' => array(
					'name'  => 'popup_type',
					'value' => '',
				),
			);
			$fields['disable_overlay'] = array(
				'name'  => 'disable_overlay',
				'title' => __( 'Disable Overlay', 'porto-functionality' ),
				'type'  => 'checkbox',
				'desc'  => __( 'Disable the popup overlay', 'porto-functionality' ),
			);
			$fields['enable_exit_intent'] = array(
				'name'  => 'enable_exit_intent',
				'title' => __( 'Exit Intent Popup', 'porto-functionality' ),
				'type'  => 'checkbox',
				'desc'  => __( 'Use as Exit Intent Popup', 'porto-functionality' ),
			);
			$fields['load_duration']   = array(
				'name'    => 'load_duration',
				'title'   => __( 'Popup Load Time (ms)', 'porto-functionality' ),
				'type'    => 'text',
				'default' => '4000',
				'required' => array(
					'name'  => 'enable_exit_intent',
					'value' => '',
				),
			);
			$fields['disable_popup_period']   = array(
				'name'    => 'disable_popup_period',
				'title'   => __( 'Popup Disable Period', 'porto-functionality' ),
				'type'    => 'select',
				'default' => '',
				'description' => __( 'The popup will only appear once during the selected period.', 'porto-functionality' ),
				'options' => array(
					'' => __( 'Select', 'porto-functionality' ),
					'1' => __( 'Day', 'porto-functionality' ),
					'7' => __( 'Week', 'porto-functionality' ),
				),
				'required' => array(
					'name'  => 'popup_type',
					'value' => '',
				),
			);
		}
	}

	$fields = array_merge(
		$fields,
		array(
			// Layout
			'container'  => array(
				'name'    => 'container',
				'title'   => __( 'Wrap as Container', 'porto-functionality' ),
				'type'    => 'select',
				'default' => 'no',
				'options' => array(
					'no'    => __( 'No Wrapper', 'porto-functionality' ),
					'yes'   => __( 'Inner Container', 'porto-functionality' ),
					'fluid' => __( 'Fluid Container', 'porto-functionality' ),
				),
			),
			'custom_css' => array(
				'name'  => 'custom_css',
				'title' => __( 'Custom CSS', 'porto-functionality' ),
				'type'  => 'textarea',
				'desc'  => sprintf( __( 'You can change %1$sglobal%2$s value in theme option.', 'porto-functionality' ), '<a href="' . porto_get_theme_option_url( 'css-code' ) . '" target="_blank">', '</a>' ),
			),
		)
	);
	if ( 'header' == $builder_type || 'footer' == $builder_type ) {
		$fields['container']['default'] = 'fluid';
	}

	if ( current_user_can( 'manage_options' ) ) {
		$fields['custom_js_body'] = array(
			'name'  => 'custom_js_body',
			'title' => __( 'JS Code', 'porto-functionality' ),
			'type'  => 'textarea',
			'desc'  => sprintf( __( 'You can change %1$sglobal%2$s value in theme option.', 'porto-functionality' ), '<a href="' . porto_get_theme_option_url( 'js-code' ) . '" target="_blank">', '</a>' ),
		);
	}

	return $fields;
}

function porto_block_meta_box() {
	$meta_fields = porto_block_meta_fields();
	porto_show_meta_box( $meta_fields );
}

// Save Meta Values
add_action( 'save_post', 'porto_save_block_meta_values' );
function porto_save_block_meta_values( $post_id ) {
	if ( ! function_exists( 'get_current_screen' ) ) {
		return;
	}
	$screen = get_current_screen();
	if ( $screen && 'post' == $screen->base && ( 'block' == $screen->id || 'porto_builder' == $screen->id ) ) {
		porto_save_meta_value( $post_id, porto_block_meta_fields() );
	}
}

// Remove in default custom field meta box
add_filter( 'is_protected_meta', 'porto_block_protected_meta', 10, 3 );
function porto_block_protected_meta( $protected, $meta_key, $meta_type ) {
	if ( ! function_exists( 'get_current_screen' ) ) {
		return $protected;
	}
	$screen = get_current_screen();
	if ( ! $protected && $screen && 'post' == $screen->base && ( 'block' == $screen->id || 'porto_builder' == $screen->id ) ) {
		if ( array_key_exists( $meta_key, porto_block_meta_fields() ) ) {
			$protected = true;
		}
	}
	return $protected;
}
