<?php 

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

class Opalestate_Admin_Agency { 

	/**
	 *
	 */
	public function __construct(){

		add_action( 'cmb2_admin_init', array( $this, 'metaboxes' ) );
		add_action( 'save_post',  array( $this , 'on_save_post'), 13, 2 );
		
		add_action( 'user_register'  , array( $this, 'on_update_user' ), 10, 1 );
		add_action( 'profile_update' , array( $this, 'on_update_user' ), 10, 1 );	
		
	}

	/**
	 * Update relationship post and user data, auto update meta information from post to user
	 */
	public function on_save_post( $post_id ){
		$post_type = get_post_type($post_id);
		if( $post_type == 'opalestate_agency' ){
			if( isset($_POST[OPALESTATE_AGENCY_PREFIX.'user_id']) && $_POST[OPALESTATE_AGENCY_PREFIX.'user_id'] ){ 

				$user_id = absint( $_POST[OPALESTATE_AGENCY_PREFIX.'user_id'] );
				update_user_meta( $user_id, OPALESTATE_USER_PROFILE_PREFIX . 'related_id', $post_id );
				
				OpalEstate_Agency::update_user_data(  $user_id );
			//	OpalEstate_Agency::update_properties_related(  $user_id );

			}
		}
	}

	/**
	 * Auto update meta information to post from user data updated or created
	 */
	public function on_update_user() {
		if( isset($_POST['user_id'])  && (int) $_POST['user_id'] && isset($_POST['role']) ) {
			if( $_POST['role']  == 'opalestate_agency' ){
				$user_id 	= absint( $_POST['user_id'] );
				$related_id = get_user_meta( $user_id, OPALESTATE_USER_PROFILE_PREFIX . 'related_id', true );

				$post 		= get_post( $related_id );

				if( isset($post->ID) && $post->ID ){
					OpalEstate_Agency::update_data_from_user( $related_id );
				}
			}
		}
	}

	/**
	 *
	 */
	public function metaboxes_fields( $prefix = '' ){
 
		if ( ! $prefix ) {
			$prefix = OPALESTATE_AGENCY_PREFIX;
		}

		$fields =  array(
			
			
			
			array(
			    'name'     => esc_html__('Gallery' ,'opalestate-pro'),
			    'desc'     => esc_html__('Select one, to add new you create in location of estate panel','opalestate-pro'),
			    'id'       => $prefix."gallery",
			    'type'     => 'file_list',
			) ,
			 
			array(
				'name' => esc_html__( 'Slogan', 'opalestate-pro' ),
				'id'   => "{$prefix}slogan",
				'type' => 'text'
			)
		);

		return apply_filters( 'opalestate_postype_agency_metaboxes_fields' , $fields );
	}

	/**
	 *
	 */
	public function metaboxes( ){

		global $pagenow; 

		if( ($pagenow == 'post.php' || $pagenow == 'post-new.php') ) {
		
			$prefix = OPALESTATE_AGENCY_PREFIX;

			$metabox = new Opalestate_Agency_MetaBox(); 
			
			$fields = $this->metaboxes_fields(); 
			$fields = array_merge_recursive( $fields , 
				$metabox->get_office_fields( $prefix ),  
				$metabox->get_address_fields( $prefix )
			);


			$box_options = array(
				'id'           => $prefix . 'edit',
				'title'        => esc_html__( 'Metabox', 'opalestate-pro' ),
				'object_types' => array( 'opalestate_agency' ),
				'show_names'   => true,
			);

			// Setup meta box
			$cmb = new_cmb2_box( $box_options );

			// Setting tabs
			$tabs_setting           = array(
				'config' => $box_options,
				'layout' => 'vertical', // Default : horizontal
				'tabs'   => array()
			);


			$tabs_setting['tabs'][] = array(
				'id'     => 'p-general',
				'icon'	 => 'dashicons-admin-home',
				'title'  => esc_html__( 'General', 'opalestate-pro' ),
				'fields' => $fields
			);

			$tabs_setting['tabs'][] = array(
				'id'     => 'p-socials',
				'icon'	 => 'dashicons-share',
				'title'  => esc_html__( 'Socials', 'opalestate-pro' ),
				'fields' => $metabox->get_social_fields( $prefix )
			);


			$tabs_setting['tabs'][] = array(
				'id'     => 'p-target',
				'icon'	 => 'dashicons-admin-tools',
				'title'  => esc_html__( 'Team', 'opalestate-pro' ),
				'fields' => $metabox->metaboxes_target()
			);
			// Set tabs
			$cmb->add_field( array(
				'id'   => '__tabs',
				'type' => 'tabs',
				'tabs' => $tabs_setting
			) );
		}
	}
}
new Opalestate_Admin_Agency();