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


if ( ! class_exists( 'AddMetaBox' ) ) {

	class AddMetaBox {

		public $data = array();

		public function __construct( $args ) {

			$this->data = &$args;
			if ( isset( $this->data['seat_plan'] ) ) {
				add_action( 'mp_event_all_in_tab_item_seat_plan', array( $this, 'meta_box_callback' ), 10, 1 );
			}elseif ( isset( $this->data['every_day_setting'] ) ) {
			    add_action('mp_event_recurring_every_day_setting',array( $this, 'meta_box_callback' ), 10, 1);
            } elseif ( $this->get_meta_box_screen()[0] == 'mep_events' && $this->get_meta_box_context() == 'normal' ) {
				add_action( 'mp_event_all_in_tab_menu', array( $this, 'mp_event_all_in_tab_menu_list' ) );
				add_action( 'mp_event_all_in_tab_item', array( $this, 'meta_box_callback' ), 10, 1 );
			} else {
				add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 12 );
			}


			add_action( 'save_post', array( $this, 'save_post' ), 12 );


		}

		public function add_meta_boxes() {


			add_meta_box( $this->get_meta_box_id(), $this->get_meta_box_title(), array( $this, 'meta_box_callback' ),
				$this->get_meta_box_screen(), $this->get_meta_box_context(), $this->get_meta_box_priority(), $this->get_callback_args() );
		}


		public function save_post( $post_id ) {

			$get_option_name = $this->get_option_name();
			$post_id         = $this->get_post_id();

			if ( ! empty( $get_option_name ) ):
				$option_value = serialize( stripslashes_deep($_POST[ $get_option_name ]) );

				update_post_meta( $post_id, $get_option_name, $option_value );


			else:

				foreach ( $this->get_panels() as $panelsIndex => $panel ):
					foreach ( $panel['sections'] as $sectionIndex => $section ):
						foreach ( $section['options'] as $option ):

							$option_value = isset( $_POST[ $option['id'] ] ) ? stripslashes_deep($_POST[ $option['id'] ]) : '';

							if ( is_array( $option_value ) ) {
								$option_value = serialize( $option_value );
							}

							if(!empty($option['id'])){
								update_post_meta( $post_id, $option['id'], $option_value );
							}

						endforeach;
					endforeach;
				endforeach;
			endif;
		}

		public function mp_event_all_in_tab_menu_list() {
			?>
            <li data-target-tabs="#<?php echo $this->get_meta_box_id(); ?>">
				<?php echo $this->get_meta_box_title(); ?>
            </li>
			<?php
		}


		public function meta_box_callback( $post_id = null ) {

			$get_nav_position = $this->get_nav_position();

			//var_dump($get_nav_position);
			if ( $this->get_meta_box_screen()[0] == 'mep_events' && $this->get_meta_box_context() == 'normal' && !isset( $this->data['seat_plan'] )) {
				?>
                <div class="mp_tab_item" data-tab-item="#<?php echo $this->get_meta_box_id(); ?>">
				<?php
			}
			?>

            <div class='wrap ppof-settings ppof-metabox'>
                <div class='navigation <?php echo $get_nav_position; ?>'>

                    <div class="nav-header">
						<?php
						do_action( 'nav_header_top' );
						?>
                        <div class="themeName"><?php echo $this->get_item_name(); ?></div>
                        <div class="themeVersion"><?php echo sprintf( __( 'Version: %s', 'wp-theme-settings' ), $this->get_item_version() ); ?></div>
						<?php
						do_action( 'nav_header_bottom' );
						?>
                    </div>

                    <div class="nav-items">
						<?php
						do_action( 'nav_nav_items_top' );
						?>
						<?php


						$current_page = 1;
						foreach ( $this->get_panels() as $page_id => $page ):


							$page_settings = ! empty( $page['sections'] ) ? $page['sections'] : array();


							$page_settings_count = count( $page_settings );
							//var_dump($page_settings);
							?>
                            <li class="nav-item-wrap <?php if ( ( $page_settings_count > 1 ) ) {
								echo 'has-child';
							} ?> <?php if ( $current_page == $page_id ) {
								echo 'active';
							} ?>">
                                <a dataid="<?php echo $page_id; ?>" href='#<?php //echo $pagenow.'?'.$section_id;
								?><?php echo
								$page_id; ?>' class='nav-item'><?php echo $page['page_nav']; ?>

									<?php if ( ( $page_settings_count > 1 ) ) {
										echo '<i class="child-nav-icon fas fa-angle-down"></i>';
									} ?>
                                </a>
								<?php
								if ( ( $page_settings_count > 1 ) ):
									?>
                                    <ul class="child-navs">
										<?php
										foreach ( $page_settings as $section_id => $nav_sections ):
											$nav_sections_title = ! empty( $nav_sections['nav_title'] ) ? $nav_sections['nav_title'] : $nav_sections['title'];

											//var_dump($nav_sections_title);
											?>
                                            <li>

                                                <a sectionId="<?php echo $section_id; ?>" dataid="<?php echo $page_id; ?>" href='#<?php echo $section_id; ?>' class='nav-item <?php if ( $current_page == $page_id ) {
													echo 'active';
												} ?>'><?php echo $nav_sections_title; ?>


                                                </a>


                                            </li>
										<?php

										endforeach;
										?>
                                    </ul>
								<?php
								endif;
								?>


                            </li>

							<?php


							$current_page ++;
						endforeach;
						?>
						<?php
						do_action( 'nav_nav_items_bottom' );
						?>
                    </div>

                    <div class="nav-footer">
						<?php
						do_action( 'nav_footer_top' );
						?>

						<?php
						do_action( 'nav_footer_bottom' );
						?>
                    </div>

                </div>

				<?php

				if ( $get_nav_position == 'right' ) {
					$form_wrapper_position = 'left';
				} elseif ( $get_nav_position == 'left' ) {
					$form_wrapper_position = 'right';
				} elseif ( $get_nav_position == 'top' ) {
					$form_wrapper_position = 'full-width-top';
				} else {
					$form_wrapper_position = 'full-width';
				}
				?>

                <div class="form-wrapper <?php echo $form_wrapper_position; ?>">

                    <div class="form-section">
						<?php

						$current_page = 1;

						foreach ( $this->get_panels() as $panelsIndex => $panel ):


							?>
                            <div class="tab-content <?php if ( $current_page == 1 ) {
								echo 'active';
							} ?>  tab-content-<?php
							echo $panelsIndex; ?>">
								<?php
								foreach ( $panel['sections'] as $sectionIndex => $section ):
									?>
                                    <div class="section">
                                        <h1 id="<?php echo $sectionIndex; ?>" class="section-title"><?php echo $section['title']; ?></h1>
                                        <p class="description"><?php echo $section['description']; ?></p>

                                        <table class="form-table">
                                            <tbody>

											<?php
											foreach ( $section['options'] as $option ):
												?>
                                                <tr>
                                                    <th scope="row"><?php echo $option['title']; ?></th>
                                                    <td>
														<?php

														$option_value = get_post_meta( $this->get_post_id(), $option['id'], true );

														if ( is_serialized( $option_value ) ) {
															$option_value = unserialize( $option_value );


														}

														$option['value'] = $option_value;


														$this->field_generator( $option )
														?>

                                                    </td>
                                                </tr>
											<?php

											endforeach;
											?>

                                            </tbody>
                                        </table>

                                    </div>

								<?php


								endforeach;

								?>

                            </div>
							<?php

							$current_page ++;
						endforeach;

						?>

                    </div>
                </div>
            </div>
			<?php
			if ( $this->get_meta_box_screen()[0] == 'mep_events' && $this->get_meta_box_context() == 'normal'  && !isset( $this->data['seat_plan'] )) {
				?>
                </div>
				<?php
			}

		}


		public function field_generator( $option ) {

			$id      = isset( $option['id'] ) ? $option['id'] : "";
			$type    = isset( $option['type'] ) ? $option['type'] : "";
			$details = isset( $option['details'] ) ? $option['details'] : "";

			$post_id = $this->get_post_id();

			if ( empty( $id ) ) {
				return;
			}

			$prent_option_name   = $this->get_option_name();
			$FormFieldsGenerator = new FormFieldsGenerator();

			if ( ! empty( $prent_option_name ) ):
				$field_name           = $prent_option_name . '[' . $id . ']';
				$option['field_name'] = $field_name;

				$prent_option_value = get_post_meta( $post_id, $prent_option_name, true );

				$prent_option_value = is_serialized( $prent_option_value ) ? unserialize( $prent_option_value ) : array();
				$option['value']    = isset( $prent_option_value[ $id ] ) ? $prent_option_value[ $id ] : '';
			else:
				$option['field_name'] = $id;
				$option_value         = get_post_meta( $post_id, $id, true );
				$option['value']      = is_serialized( $option_value ) ? unserialize( $option_value ) : $option_value;

			endif;


			//var_dump($prent_option_value);

			?>

			<?php


			if ( isset( $option['type'] ) && $option['type'] === 'text' ) {
				echo $FormFieldsGenerator->field_text( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'text_multi' ) {
				echo $FormFieldsGenerator->field_text_multi( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'textarea' ) {
				echo $FormFieldsGenerator->field_textarea( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'checkbox' ) {
				echo $FormFieldsGenerator->field_checkbox( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'checkbox_multi' ) {
				echo $FormFieldsGenerator->field_checkbox_multi( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'radio' ) {
				echo $FormFieldsGenerator->field_radio( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'select' ) {
				echo $FormFieldsGenerator->field_select( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'range' ) {
				echo $FormFieldsGenerator->field_range( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'range_input' ) {
				echo $FormFieldsGenerator->field_range_input( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'switch' ) {
				echo $FormFieldsGenerator->field_switch( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'switch_multi' ) {
				echo $FormFieldsGenerator->field_switch_multi( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'switch_img' ) {
				echo $FormFieldsGenerator->field_switch_img( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'time_format' ) {
				echo $FormFieldsGenerator->field_time_format( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'date_format' ) {
				echo $FormFieldsGenerator->field_date_format( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'datepicker' ) {
				echo $FormFieldsGenerator->field_datepicker( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'color_sets' ) {
				echo $FormFieldsGenerator->field_color_sets( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'colorpicker' ) {
				echo $FormFieldsGenerator->field_colorpicker( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'colorpicker_multi' ) {
				echo $FormFieldsGenerator->field_colorpicker_multi( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'link_color' ) {
				echo $FormFieldsGenerator->field_link_color( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'icon' ) {
				echo $FormFieldsGenerator->field_icon( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'icon_multi' ) {
				echo $FormFieldsGenerator->field_icon_multi( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'dimensions' ) {
				echo $FormFieldsGenerator->field_dimensions( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'wp_editor' ) {
				echo $FormFieldsGenerator->field_wp_editor( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'select2' ) {
				echo $FormFieldsGenerator->field_select2( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'faq' ) {
				echo $FormFieldsGenerator->field_faq( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'grid' ) {
				echo $FormFieldsGenerator->field_grid( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'color_palette' ) {
				echo $FormFieldsGenerator->field_color_palette( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'color_palette_multi' ) {
				echo $FormFieldsGenerator->field_color_palette_multi( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'media' ) {
				echo $FormFieldsGenerator->field_media( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'media_multi' ) {
				echo $FormFieldsGenerator->field_media_multi( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'repeatable' ) {
				echo $FormFieldsGenerator->field_repeatable( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'user' ) {
				echo $FormFieldsGenerator->field_user( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'margin' ) {
				echo $FormFieldsGenerator->field_margin( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'padding' ) {
				echo $FormFieldsGenerator->field_padding( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'border' ) {
				echo $FormFieldsGenerator->field_border( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'switcher' ) {
				echo $FormFieldsGenerator->field_switcher( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'password' ) {
				echo $FormFieldsGenerator->field_password( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'post_objects' ) {
				echo $FormFieldsGenerator->field_post_objects( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === 'google_map' ) {
				echo $FormFieldsGenerator->field_google_map( $option );
			} elseif ( isset( $option['type'] ) && $option['type'] === $type ) {
				do_action( "wp_theme_settings_field_$type", $option );
			}
			if ( ! empty( $details ) ) {
				echo "<p class='description'>$details</p>";
			}


		}


		private function get_meta_box_id() {
			if ( isset( $this->data['meta_box_id'] ) ) {
				return $this->data['meta_box_id'];
			} else {
				return "";
			}
		}

		private function get_meta_box_title() {
			if ( isset( $this->data['meta_box_title'] ) ) {
				return $this->data['meta_box_title'];
			} else {
				return "";
			}
		}

		private function get_meta_box_screen() {
			if ( isset( $this->data['screen'] ) ) {
				return $this->data['screen'];
			} else {
				return array( 'post' );
			}
		}

		private function get_meta_box_context() {
			if ( isset( $this->data['context'] ) ) {
				return $this->data['context'];
			} else {
				return 'normal';
			}
		}

		private function get_meta_box_priority() {
			if ( isset( $this->data['priority'] ) ) {
				return $this->data['priority'];
			} else {
				return "high";
			}
		}

		private function get_callback_args() {
			if ( isset( $this->data['callback_args'] ) ) {
				return $this->data['callback_args'];
			} else {
				return array();
			}
		}

		private function get_panels() {
			if ( isset( $this->data['panels'] ) ) {
				return $this->data['panels'];
			} else {
				return array();
			}
		}

		private function get_item_name() {
			if ( isset( $this->data['item_name'] ) ) {
				return $this->data['item_name'];
			} else {
				return "PickPlugins";
			}
		}

		private function get_item_version() {
			if ( isset( $this->data['item_version'] ) ) {
				return $this->data['item_version'];
			} else {
				return "1.0.0";
			}
		}

		private function get_option_name() {
			if ( isset( $this->data['option_name'] ) ) {
				return $this->data['option_name'];
			} else {
				return false;
			}
		}

		private function get_nav_position() {
			if ( isset( $this->data['nav_position'] ) ) {
				return $this->data['nav_position'];
			} else {
				return 'left';
			}
		}

		private function get_post_id() {

			$post_id = get_the_ID();

			return $post_id;
		}


	}


}