<?php
// No direct access, please
if ( ! defined( 'ABSPATH' ) ) exit;

if ( ! function_exists( 'generate_sections_admin_body_class' ) ) {
	add_filter( 'admin_body_class', 'generate_sections_admin_body_class' );

	function generate_sections_admin_body_class( $classes ) {
		global $post;
		$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';

		if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
			$classes .= ' generate-sections-enabled';
		}

	    return $classes;
	}
}

if ( ! function_exists( 'generate_sections_content_width' ) ) {
	add_action( 'wp', 'generate_sections_content_width', 50 );
	/**
	 * Set our content width when sections are enabled
	 */
	function generate_sections_content_width() {
		global $post;
		$use_sections = ( isset( $post ) ) ? get_post_meta( $post->ID, '_generate_use_sections', TRUE) : '';

		if ( isset( $use_sections['use_sections'] ) && 'true' == $use_sections['use_sections'] ) {
			global $content_width;
			$content_width = 2000;
		}
	}
}

if ( ! function_exists( 'generate_sections_add_metaboxes' ) ) {
	add_action( 'add_meta_boxes', 'generate_sections_add_metaboxes', 5 );
	/*
	 * Functions for creating the metaboxes
	 */
	function generate_sections_add_metaboxes() {

		$post_types = apply_filters( 'generate_sections_post_types', array( 'page', 'post' ) );

		add_meta_box(
			'_generate_use_sections_metabox',
			__( 'Use Sections', 'gp-premium' ),
			'generate_sections_use_sections_metabox',
			$post_types,
			'side',
			'high',
			array(
				'__block_editor_compatible_meta_box' => apply_filters( 'generate_sections_gutenberg_compatible', false ),
			)
		);

		add_meta_box(
			'_generate_sections_metabox',
			__( 'Sections', 'gp-premium' ),
			'generate_sections_sections_metabox',
			$post_types,
			'normal',
			'high'
		);

	}
}

if ( ! function_exists( 'generate_sections_sanitize_function' ) ) {
	/*
	 * Sanitize our settings
	*/
	function generate_sections_sanitize_function( $data, $post_id ) {

		$section = array();

		if ( isset( $data['title'] ) ) {
			$section['title'] = sanitize_text_field( $data['title'] );
		}

		if ( isset( $data['content'] ) ) {
			$section['content'] = sanitize_post_field( 'post_content', $data['content'], $post_id, 'db' );
		}

		if ( isset( $data['custom_classes'] ) ) {
			$section['custom_classes'] = sanitize_text_field( $data['custom_classes'] );
		}

		if ( isset( $data['custom_id'] ) ) {
			$section['custom_id'] = sanitize_text_field( $data['custom_id'] );
		}

		if ( isset( $data['top_padding'] ) ) {
			$section['top_padding'] = '' == $data['top_padding'] ? $data['top_padding'] : absint( $data['top_padding'] );
		}

		if ( isset( $data['bottom_padding'] ) ) {
			$section['bottom_padding'] = '' == $data['bottom_padding'] ? $data['bottom_padding'] : absint( $data['bottom_padding'] );
		}

		if ( isset( $data['top_padding_unit'] ) ) {
			$section['top_padding_unit'] = $data['top_padding_unit'] == '%' ? '%' : '';
		}

		if ( isset( $data['bottom_padding_unit'] ) ) {
			$section['bottom_padding_unit'] = $data['bottom_padding_unit'] == '%' ? '%' : '';
		}

		if ( isset( $data['background_image'] ) ) {
			$section['background_image'] = absint( $data['background_image'] );
		}

		if ( isset( $data['background_color'] ) ) {
			$section['background_color'] = generate_sections_sanitize_rgba( $data['background_color'] );
		}

		if ( isset( $data['text_color'] ) ) {
			$section['text_color'] = generate_sections_sanitize_hex_color( $data['text_color'] );
		}

		if ( isset( $data['link_color'] ) ) {
			$section['link_color'] = generate_sections_sanitize_hex_color( $data['link_color'] );
		}

		if ( isset( $data['link_color_hover'] ) ) {
			$section['link_color_hover'] = generate_sections_sanitize_hex_color( $data['link_color_hover'] );
		}

		if ( isset( $data['box_type'] ) ) {
			$section['box_type'] = $data['box_type'] == 'contained' ? 'contained' : '';
		}

		if ( isset( $data['inner_box_type'] ) ) {
			$section['inner_box_type'] = $data['inner_box_type'] == 'fluid' ? 'fluid' : '';
		}

		if ( isset( $data['parallax_effect'] ) ) {
			$section['parallax_effect'] = $data['parallax_effect'] == 'enable' ? 'enable' : '';
		}

		if ( isset( $data['background_color_overlay'] ) ) {
			$section['background_color_overlay'] = $data['background_color_overlay'] == 'enable' ? 'enable' : '';
		}

		return $section;

	}
}

if ( ! function_exists( 'generate_sections_metabox_scripts' ) ) {
	add_action( 'admin_enqueue_scripts', 'generate_sections_metabox_scripts', 20 );
	/*
	 * Enqueue styles and scripts specific to metaboxs
	 */
	function generate_sections_metabox_scripts( $hook ) {
		// I prefer to enqueue the styles only on pages that are using the metaboxes
		if ( in_array( $hook, array( "post.php", "post-new.php" ) ) ) {

			$post_types = apply_filters( 'generate_sections_post_types', array( 'page', 'post' ) );

			$screen = get_current_screen();
			$post_type = $screen->id;

			if ( in_array( $post_type, (array) $post_types ) ) {
				wp_enqueue_style( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'css/generate-sections-metabox.css', false, GENERATE_SECTIONS_VERSION );
				wp_enqueue_style( 'generate-lc-switch', plugin_dir_url( __FILE__ ) . 'css/lc_switch.css', false, GENERATE_SECTIONS_VERSION );

				//make sure we enqueue some scripts just in case ( only needed for repeating metaboxes )
				wp_enqueue_script( 'jquery' );
				wp_enqueue_script( 'jquery-ui-core' );
				wp_enqueue_script( 'jquery-ui-widget' );
				wp_enqueue_script( 'jquery-ui-mouse' );
				wp_enqueue_script( 'jquery-ui-sortable' );
				wp_enqueue_script( 'editor' );
				wp_enqueue_script( 'media-upload' );
				wp_enqueue_script( 'wp-color-picker' );
				wp_enqueue_style( 'wp-color-picker' );
				wp_enqueue_script( 'wp-color-picker-alpha', plugin_dir_url( __FILE__ ) . 'js/wp-color-picker-alpha.min.js', array( 'wp-color-picker' ), GENERATE_SECTIONS_VERSION );

				wp_enqueue_media();

				// special script for dealing with repeating textareas- needs to run AFTER all the tinyMCE init scripts, so make 'editor' a requirement
				wp_enqueue_script( 'generate-sections-metabox', plugin_dir_url( __FILE__ ) . 'js/generate-sections-metabox.js', array( 'jquery', 'jquery-ui-core', 'jquery-ui-widget', 'jquery-ui-mouse', 'jquery-ui-sortable', 'editor', 'media-upload', 'wp-color-picker' ), GENERATE_SECTIONS_VERSION, true );
				wp_enqueue_script( 'generate-lc-switch', plugin_dir_url( __FILE__ ) . 'js/lc_switch.js', array( 'jquery' ), GENERATE_SECTIONS_VERSION, true );

				if ( function_exists( 'wp_add_inline_script' ) ) {
					wp_add_inline_script( 'generate-lc-switch', 'jQuery(document).ready(function($) { $(".use-sections-switch").lc_switch("","");});' );

					if ( function_exists( 'generate_get_default_color_palettes' ) ) {
						// Grab our palette array and turn it into JS
						$palettes = json_encode( generate_get_default_color_palettes() );

						// Add our custom palettes
						// json_encode takes care of escaping
						wp_add_inline_script( 'wp-color-picker', 'jQuery.wp.wpColorPicker.prototype.options.palettes = ' . $palettes . ';' );
					}
				}
			}
		}
	}
}

if ( ! function_exists( 'generate_sections_admin_footer_scripts' ) ) {
	add_action( 'admin_footer', 'generate_sections_admin_footer_scripts' );

	function generate_sections_admin_footer_scripts() {
		// We don't need this if wp_add_inline_script exists
		if ( function_exists( 'wp_add_inline_script' ) ) {
			return;
		}
		?>
		<script>
			if ( typeof lc_switch !== 'undefined' ) {
				jQuery(document).ready(function($) { $(".use-sections-switch").lc_switch("","");});
			}
		</script>
		<?php
	}
}


if ( ! function_exists( 'generate_sections_use_sections_metabox' ) ) {
	function generate_sections_use_sections_metabox() {
		include_once( plugin_dir_path( __FILE__ ) . 'views/use-sections.php' );
	}
}

if ( ! function_exists( 'generate_sections_sections_metabox' ) ) {
	function generate_sections_sections_metabox() {
		global $post;

		$meta = get_post_meta( $post->ID, '_generate_sections', true );

		$sections = isset( $meta['sections'] ) && is_array( $meta['sections' ] ) ? $meta['sections'] :  array();

		$translation_array = array(
			'confirm' => __( 'This action can not be undone, are you sure?', 'gp-premium' ),
	    	'post_id' => $post->ID,
	    	'sections' => $sections,
	    	'default_title' => __( 'Section', 'gp-premium' ),
			'default_content_title' => __( 'Content', 'gp-premium' ),
	    	'tabs'	=> array(
				array( 'title' => __( 'Settings', 'gp-premium' ), 'target' => 'style', 'active' => 'false' ),
				array( 'title' => __( 'Content', 'gp-premium' ), 'target' => 'content', 'active' => 'true' ),
	    		//array( 'title' => __( 'Layout', 'gp-premium' ), 'target' => 'layout', 'active' => 'false' ),
	    	),
	    	'top_padding' => apply_filters( 'generate_sections_default_padding_top','40' ),
	    	'bottom_padding' => apply_filters( 'generate_sections_default_padding_bottom','40' ),
	    	'media_library_title' => __('Section Background', 'gp-premium' ),
	    	'media_library_button' => __( 'Set as Section Background', 'gp-premium' ),
	    	'generate_nonce' => wp_create_nonce( 'generate_sections_nonce' ),
	    	'default_editor'	=> user_can_richedit() && wp_default_editor() == 'tinymce' ? 'tmce-active' : 'html-active',
	    	'user_can_richedit' => user_can_richedit(),
	    	'insert_into_section'	=> __( 'Insert into Section', 'gp-premium' ),
	    	'edit_section'	=> __( 'Edit Section', 'gp-premium' )

	    );
	    wp_localize_script( 'generate-sections-metabox', 'generate_sections_metabox_i18n', $translation_array );

		include_once( plugin_dir_path( __FILE__ ) . 'views/sections.php' );
		include_once( plugin_dir_path( __FILE__ ) . 'views/sections-template.php' );
		add_action( 'print_media_templates', 'generate_sections_print_templates' );

		do_action( 'generate_sections_metabox' );
	}
}

if ( ! function_exists( 'generate_sections_save_use_metabox' ) ) {
	add_action( 'save_post', 'generate_sections_save_use_metabox' );
	/*
	 * Save the "use" metabox
	 */
	function generate_sections_save_use_metabox( $post_id ) {
	    if ( ! isset( $_POST['_generate_sections_use_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_use_sections_nonce'], 'generate_sections_use_sections_nonce' ) ) {
	        return $post_id;
	    }

	    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
	        return $post_id;
	    }

	    if ( ! current_user_can('edit_post', $post_id ) ) {
	        return $post_id;
	    }

	    if  ( isset ( $_POST['_generate_use_sections'] ) && isset ( $_POST['_generate_use_sections']['use_sections'] ) && $_POST['_generate_use_sections']['use_sections'] == 'true' ) {
			update_post_meta( $post_id, '_generate_use_sections', array( 'use_sections' => 'true' ) );
	    } else {
	        delete_post_meta( $post_id, '_generate_use_sections' );
	    }
	}
}

if ( ! function_exists( 'generate_sections_save_sections_metabox' ) ) {
	add_action( 'save_post', 'generate_sections_save_sections_metabox', 20 );
	/*
	 * Save the sections metabox
	 */
	function generate_sections_save_sections_metabox( $post_id ) {

	    if ( ! isset( $_POST['_generate_sections_nonce'] ) || ! wp_verify_nonce( $_POST['_generate_sections_nonce'], 'generate_sections_nonce' ) ) {
			return $post_id;
	    }

	    if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
	        return $post_id;
	    }

	    if ( ! current_user_can('edit_post', $post_id ) ) {
	        return $post_id;
	    }

	    $clean = array();

	    if  ( isset ( $_POST['_generate_sections'] ) && isset( $_POST['_generate_sections']['sections'] ) && is_array( $_POST['_generate_sections']['sections'] ) ) {

			foreach( $_POST['_generate_sections']['sections'] as $section ) {

				$section = json_decode( stripslashes( trim($section) ), true);

				$section = generate_sections_sanitize_function( $section, $post_id );
				if ( ! empty( $section ) ){
					$clean[] = $section;
				}

			}

	    }

	    // save data
	    if ( ! empty( $clean ) ) {
	    	// this maintains data structure of previous version
	    	$meta = array( 'sections' => $clean );
	        update_post_meta( $post_id, '_generate_sections', $meta );
	    } else {
	        delete_post_meta( $post_id, '_generate_sections' );
	    }

	}
}

if ( ! function_exists( 'generate_sections_sanitize_hex_color' ) ) {
	/*
	 * Sanitize colors
	 * We don't use the built in function so we can use empty values
	 */
	function generate_sections_sanitize_hex_color( $color ) {
		if ( '' === $color ) {
			return '';
		}

		// 3 or 6 hex digits, or the empty string.
		if ( preg_match('|^#([A-Fa-f0-9]{3}){1,2}$|', $color ) ) {
			return $color;
		}

		return null;
	}
}

if ( ! function_exists( 'generate_sections_sanitize_rgba' ) ) {
	/**
	 * Sanitize RGBA colors
	 * @since 1.3.42
	 */
	function generate_sections_sanitize_rgba( $color ) {
		if ( '' === $color ) {
			return '';
		}

		// If string does not start with 'rgba', then treat as hex
		// sanitize the hex color and finally convert hex to rgba
		if ( false === strpos( $color, 'rgba' ) ) {
			return generate_sections_sanitize_hex_color( $color );
		}

		// By now we know the string is formatted as an rgba color so we need to further sanitize it.
		$color = str_replace( ' ', '', $color );
		sscanf( $color, 'rgba(%d,%d,%d,%f)', $red, $green, $blue, $alpha );
		return 'rgba('.$red.','.$green.','.$blue.','.$alpha.')';

		return '';
	}
}
