<?php
/**
 * Implement theme metabox.
 *
 * @package X_Bliss
 */

if ( ! function_exists( 'x_bliss_add_theme_meta_box' ) ) :

	/**
	 * Add the Meta Box.
	 *
	 * @since 1.0.0
	 */
	function x_bliss_add_theme_meta_box() {

		$apply_metabox_post_types = array( 'post', 'page' );

		foreach ( $apply_metabox_post_types as $key => $type ) {
			add_meta_box(
				'theme-settings',
				esc_html__( 'Theme Settings', 'x-bliss-pro' ),
				'x_bliss_render_theme_settings_metabox',
				$type
			);
		}

	}

endif;

add_action( 'add_meta_boxes', 'x_bliss_add_theme_meta_box' );

if ( ! function_exists( 'x_bliss_render_theme_settings_metabox' ) ) :

	/**
	 * Render theme settings meta box.
	 *
	 * @since 1.0.0
	 *
	 * @param WP_Post $post    The current post.
	 * @param array   $metabox Metabox arguments.
	 */
	function x_bliss_render_theme_settings_metabox( $post, $metabox ) {

		$post_id = $post->ID;

		// Meta box nonce for verification.
		wp_nonce_field( basename( __FILE__ ), 'x_bliss_theme_settings_meta_box_nonce' );

		// Fetch values of current post meta.
		$values = get_post_meta( $post_id, 'x_bliss_theme_settings', true );
		$x_bliss_theme_settings_post_layout = isset( $values['post_layout'] ) ? esc_attr( $values['post_layout'] ) : '';
		$x_bliss_theme_settings_single_image = isset( $values['single_image'] ) ? esc_attr( $values['single_image'] ) : '';
		$x_bliss_theme_settings_single_image_alignment = isset( $values['single_image_alignment'] ) ? esc_attr( $values['single_image_alignment'] ) : '';
		$x_bliss_theme_settings_sidebar_location_primary = isset( $values['sidebar_location_primary'] ) ? esc_attr( $values['sidebar_location_primary'] ) : '';
		$x_bliss_theme_settings_sidebar_location_secondary = isset( $values['sidebar_location_secondary'] ) ? esc_attr( $values['sidebar_location_secondary'] ) : '';
	?>
	<div id="x-bliss-settings-metabox-container" class="x-bliss-settings-metabox-container">
	  <ul>
	    <li><a href="#x-bliss-settings-metabox-tab-layout"><?php echo __( 'Layout', 'x-bliss-pro' ); ?></a></li>
	    <li><a href="#x-bliss-settings-metabox-tab-image"><?php echo __( 'Image', 'x-bliss-pro' ); ?></a></li>
	    <li><a href="#x-bliss-settings-metabox-tab-sidebar"><?php echo __( 'Sidebar', 'x-bliss-pro' ); ?></a></li>
	  </ul>
	  <div id="x-bliss-settings-metabox-tab-layout">
	    <h4><?php echo __( 'Layout Settings', 'x-bliss-pro' ); ?></h4>
	    <div class="x-bliss-row-content">
	    	<label for="x_bliss_theme_settings_post_layout"><?php echo esc_html__( 'Single Layout', 'x-bliss-pro' ); ?></label>
	    	<?php
	    	$dropdown_args = array(
				'id'          => 'x_bliss_theme_settings_post_layout',
				'name'        => 'x_bliss_theme_settings[post_layout]',
				'selected'    => $x_bliss_theme_settings_post_layout,
				'add_default' => true,
	    		);
	    	x_bliss_render_select_dropdown( $dropdown_args, 'x_bliss_get_global_layout_options' );
	    	?>

	    </div><!-- .x-bliss-row-content -->

	  </div><!-- #x-bliss-settings-metabox-tab-layout -->

	  <div id="x-bliss-settings-metabox-tab-image">
		    <h4><?php echo __( 'Image Settings', 'x-bliss-pro' ); ?></h4>
		    <div class="x-bliss-row-content">
			    <label for="x_bliss_theme_settings_single_image"><?php echo esc_html__( 'Image in Single Post/Page', 'x-bliss-pro' ); ?></label>
	        	<?php
	        	$dropdown_args = array(
	    			'id'          => 'x_bliss_theme_settings_single_image',
	    			'name'        => 'x_bliss_theme_settings[single_image]',
	    			'selected'    => $x_bliss_theme_settings_single_image,
	    			'add_default' => true,
	        		);
	        	x_bliss_render_select_dropdown( $dropdown_args, 'x_bliss_get_image_sizes_options' );
	        	?>
		    </div><!-- .x-bliss-row-content -->
		    <div class="x-bliss-row-content">
		    	<label for="x_bliss_theme_settings_single_image_alignment"><?php echo esc_html__( 'Image Alignment in Single Post/Page', 'x-bliss-pro' ); ?></label>
    	    	<?php
    	    	$dropdown_args = array(
    				'id'          => 'x_bliss_theme_settings_single_image_alignment',
    				'name'        => 'x_bliss_theme_settings[single_image_alignment]',
    				'selected'    => $x_bliss_theme_settings_single_image_alignment,
    				'add_default' => true,
    	    		);
    	    	x_bliss_render_select_dropdown( $dropdown_args, 'x_bliss_get_image_alignment_options' );
    	    	?>
		    </div><!-- .x-bliss-row-content -->

	  </div><!-- #x-bliss-settings-metabox-tab-image -->

	  <div id="x-bliss-settings-metabox-tab-sidebar">
	    <h4><?php echo __( 'Sidebar Settings', 'x-bliss-pro' ); ?></h4>

	    <div class="x-bliss-row-content">
	    	<label for="x_bliss_theme_settings_sidebar_location_primary"><?php echo esc_html__( 'Primary Location', 'x-bliss-pro' ); ?></label>
	    	<?php
	    	$dropdown_args = array(
				'id'          => 'x_bliss_theme_settings_sidebar_location_primary',
				'name'        => 'x_bliss_theme_settings[sidebar_location_primary]',
				'selected'    => $x_bliss_theme_settings_sidebar_location_primary,
				'add_default' => true,
	    		);
	    	x_bliss_render_select_dropdown( $dropdown_args, 'x_bliss_get_sidebar_options' );
	    	?>
	    </div><!-- .x-bliss-row-content -->
	    <div class="x-bliss-row-content">
	    	<label for="x_bliss_theme_settings_sidebar_location_secondary"><?php echo esc_html__( 'Secondary Location', 'x-bliss-pro' ); ?></label>
	    	<?php
	    	$dropdown_args = array(
				'id'          => 'x_bliss_theme_settings_sidebar_location_secondary',
				'name'        => 'x_bliss_theme_settings[sidebar_location_secondary]',
				'selected'    => $x_bliss_theme_settings_sidebar_location_secondary,
				'add_default' => true,
	    		);
	    	x_bliss_render_select_dropdown( $dropdown_args, 'x_bliss_get_sidebar_options' );
	    	?>
	    </div><!-- .x-bliss-row-content -->

	  </div><!-- #x-bliss-settings-metabox-tab-sidebar -->

	</div><!-- #x-bliss-settings-metabox-container -->

    <?php
	}

endif;

if ( ! function_exists( 'x_bliss_save_theme_settings_meta' ) ) :

	/**
	 * Save theme settings meta box value.
	 *
	 * @since 1.0.0
	 *
	 * @param int     $post_id Post ID.
	 * @param WP_Post $post Post object.
	 */
	function x_bliss_save_theme_settings_meta( $post_id, $post ) {

		// Verify nonce.
		if (
			! ( isset( $_POST['x_bliss_theme_settings_meta_box_nonce'] )
			&& wp_verify_nonce( sanitize_key( $_POST['x_bliss_theme_settings_meta_box_nonce'] ), basename( __FILE__ ) ) )
		) {
			return;
		}

		// Bail if auto save or revision.
		if ( defined( 'DOING_AUTOSAVE' ) || is_int( wp_is_post_revision( $post ) ) || is_int( wp_is_post_autosave( $post ) ) ) {
			return;
		}

		// Check the post being saved == the $post_id to prevent triggering this call for other save_post events.
		if ( empty( $_POST['post_ID'] ) || absint( $_POST['post_ID'] ) !== $post_id ) {
			return;
		}

		// Check permission.
		if ( isset( $_POST['post_type'] ) && 'page' === $_POST['post_type'] ) {
			if ( ! current_user_can( 'edit_page', $post_id ) ) {
				return;
			}
		} else if ( ! current_user_can( 'edit_post', $post_id ) ) {
			return;
		}

		if ( isset( $_POST['x_bliss_theme_settings'] ) && is_array( $_POST['x_bliss_theme_settings'] ) ) {
			$raw_value = wp_unslash( $_POST['x_bliss_theme_settings'] );

			if ( ! array_filter( $raw_value ) ) {

				// No value.
				delete_post_meta( $post_id, 'x_bliss_theme_settings' );

			} else {

				$meta_fields = array(
					'post_layout' => array(
						'type' => 'select',
						),
					'single_image' => array(
						'type' => 'select',
						),
					'single_image_alignment' => array(
						'type' => 'select',
						),
					'sidebar_location_primary' => array(
						'type' => 'select',
						),
					'sidebar_location_secondary' => array(
						'type' => 'select',
						),
					);

				$sanitized_values = array();

				foreach ( $raw_value as $mk => $mv ) {

					if ( isset( $meta_fields[ $mk ]['type'] ) ) {
						switch ( $meta_fields[ $mk ]['type'] ) {
							case 'select':
								$sanitized_values[ $mk ] = sanitize_key( $mv );
								break;
							case 'checkbox':
								$sanitized_values[ $mk ] = absint( $mv ) > 0 ? 1 : 0;
								break;
							default:
								$sanitized_values[ $mk ] = sanitize_text_field( $mv );
								break;
						}
					} // End if.

				}

				update_post_meta( $post_id, 'x_bliss_theme_settings', $sanitized_values );
			}

		} // End if theme settings.

	}

endif;

add_action( 'save_post', 'x_bliss_save_theme_settings_meta', 10, 2 );
