<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否
/* セクションID haumenu_define_section_id_02_utility() */
/* タブのスラグ haumenu_define_tab_slug_02_utility() */
/* $option_name 設定名 haumenu_define_option_name_02_utility() */
/* get_option GetOP02_utility() */

/***** 親設定の有効／無効に合わせて子設定の表示方法を変更する *****/
/* 関数名・設定名は画面ごとに変えること（関数重複を防ぐ） */
/* add_action('admin_notices', 'current_pagehook');を追加してページ名を取得し、$page_fooksuffixの値を変える */
/* 連動マップ（ID => セレクター）の項目を編集する */

function haup_child_setting_view_control_02_utility( $hook_suffix ) {
	//ページフックにより出力を判断
	$page_fooksuffix = 'ha-utilitiy_page_haumenu_page_utility';

	if ( $page_fooksuffix !== $hook_suffix ) {
		return;
	}

	//メインスクリプトのハンドル
	$handle = 'haup-child-setting-control-js';

	// メインスクリプトが登録されていなければ終了(スクリプトの読み込みはmain-menu.phpで記述)
	if ( ! wp_script_is( $handle, 'registered' ) ) {
		return;
	}

	//設定名
	$set_name = haumenu_define_option_name_02_utility();

	// 連動マップ（ID => セレクター）
	// 1つのIDに対して複数のCSSクラスを指定する（1つなら1行）
	$dependency_map = array(
		$set_name . 'change-frontend-list-more-text' => array(
			'.frontend-list-more-alternative-text-wrapper', // [...]の代替文字列
		),

	);

	$inner_js = "";
	foreach ( $dependency_map as $id => $selectors ) {
		foreach ( (array) $selectors as $selector ) {
			// translators: %s stands for the CSS Class & ID.
			$inner_js .= sprintf(
				"haup_apply_dependency('%s', '%s');\n",
				esc_js( $id ),
				esc_js( $selector )
			);
		}
	}

	if ( $inner_js ) {
		$js_code = "if (window.haup_apply_dependency) {\n" . $inner_js . "}";
		// 第3引数を 'after' にすることで、本体JSの直後に出力
		wp_add_inline_script( $handle, $js_code, 'after' );
	}
}
add_action( 'admin_enqueue_scripts', 'haup_child_setting_view_control_02_utility', 20 );

/*** ブロックエディタへようこそ、フルスクリーンモードの無効 ***/
/* 項目の追加とデータの更新 */
function haumenu_init_field_disable_popover_fulscreen(){
//項目の追加
	add_settings_field(
		'disable-popover-fulscreen', // 設定名
		__('Disable Popover & Fullscreenmode','hima-art-utility'), // 設定タイトル
		'haumenu_disable_popover_fulscreen', // 設定項目のHTMLを出力する関数名
		haumenu_define_tab_slug_02_utility(), //表示させるタブのスラグ
		haumenu_define_section_id_02_utility(),// $section 表示させるセクションのID
		array( 'class' => 'ha-settings-separate' )
	);

}
add_action( 'admin_init', 'haumenu_init_field_disable_popover_fulscreen' );

/* 入力フォーム */
function haumenu_disable_popover_fulscreen() {
	$set_name = haumenu_define_option_name_02_utility(); //  $option_name 設定名
	$options = get_option($set_name);
	$option_name = 'disable-popover-fulscreen'; //個別配列名

	//テーブルに値がなかった場合の措置（PHP8.x以降への対応）
	if(isset($options[$option_name])){
		$checked = $options[$option_name];
	}else{
		$checked = '';
	}
?>
<label>
	<input type="checkbox" id="<?php echo esc_html($set_name . $option_name ); ?>" name="<?php echo esc_html($set_name . '[' .$option_name. ']'); ?>" class="wppd-ui-toggle" <?php checked( $checked , 1 ); ?> value="1">
	<p><?php esc_html_e('To avoid confusion for new users when posting for the first time, we have disabled the "Welcome to Block Editor" popup and disabled fullscreen mode to prevent the left sidebar menu from being hidden.','hima-art-utility'); ?></p>
</label>
<?php
}

/*** 絵文字を無効にする ***/
/* 項目の追加とデータの更新 */
function haumenu_init_field_disable_emoji(){
//項目の追加
	add_settings_field(
		'disable-emoji', // 設定名
		__('Disable emoji feature','hima-art-utility'), // 設定タイトル
		'haumenu_disable_emoji', // 設定項目のHTMLを出力する関数名
		haumenu_define_tab_slug_02_utility(), //表示させるタブのスラグ
		haumenu_define_section_id_02_utility(),// $section 表示させるセクションのID
		array( 'class' => 'ha-settings-separate' )
	);

}
add_action( 'admin_init', 'haumenu_init_field_disable_emoji' );

/* 入力フォーム */
function haumenu_disable_emoji() {
	$set_name = haumenu_define_option_name_02_utility(); //  $option_name 設定名
	$options = get_option($set_name);
	$option_name = 'disable-emoji'; //個別配列名

	//テーブルに値がなかった場合の措置（PHP8.x以降への対応）
	if(isset($options[$option_name])){
		$checked = $options[$option_name];
	}else{
		$checked = '';
	}
?>
<label>
	<input type="checkbox" id="<?php echo esc_html($set_name . $option_name ); ?>" name="<?php echo esc_html($set_name . '[' .$option_name. ']'); ?>" class="wppd-ui-toggle" <?php checked( $checked , 1 ); ?> value="1">
	<p><?php esc_html_e('Disable the WordPress standard emoji function and prevent it from loading even on the HTML source','hima-art-utility'); ?></p>
</label>
<?php
}

/*** フロントエンドの一覧を更新日順で出力する ***/
/* 項目の追加とデータの更新 */
function haumenu_init_field_list_control(){
//項目の追加
	add_settings_field(
		'list-control', // 設定名
		__('Sort the list by update date','hima-art-utility'), // 設定タイトル
		'haumenu_list_control', // 設定項目のHTMLを出力する関数名
		haumenu_define_tab_slug_02_utility(), //表示させるタブのスラグ
		haumenu_define_section_id_02_utility(),// $section 表示させるセクションのID
		array( 'class' => 'ha-settings-separate' )
	);

}
add_action( 'admin_init', 'haumenu_init_field_list_control' );

/* 入力フォーム */
function haumenu_list_control() {
	$set_name = haumenu_define_option_name_02_utility(); //  $option_name 設定名
	$options = get_option($set_name);
	$option_name = 'list-control'; //個別配列名

	//テーブルに値がなかった場合の措置（PHP8.x以降への対応）
	if(isset($options[$option_name])){
		$checked = $options[$option_name];
	}else{
		$checked = '';
	}
?>
<label>
	<input type="checkbox" id="<?php echo esc_html($set_name . $option_name ); ?>" name="<?php echo esc_html($set_name . '[' .$option_name. ']'); ?>" class="wppd-ui-toggle" <?php checked( $checked , 1 ); ?> value="1">
	<p><?php esc_html_e('Displays frontend lists such as archives and blog lists in order of update date(The date of the RSS feed is replaced with the last update date and output)','hima-art-utility'); ?></p>
</label>
<?php
}

/*** 一覧の[...]を変更するか ***/
/* 項目の追加とデータの更新 */
function haumenu_init_field_change_frontend_list_more(){
//項目の追加
	add_settings_field(
		'change-frontend-list-more-text', // 設定名
		__('Change the text at the end of the excerpt','hima-art-utility'), // 設定タイトル
		'haumenu_change_frontend_list_more', // 設定項目のHTMLを出力する関数名
		haumenu_define_tab_slug_02_utility(), //表示させるタブのスラグ
		haumenu_define_section_id_02_utility(),// $section 表示させるセクションのID
		array( 'class' => 'ha-settings-separate' )
	);

}
add_action( 'admin_init', 'haumenu_init_field_change_frontend_list_more' );

/* 入力フォーム */
function haumenu_change_frontend_list_more() {
	$set_name = haumenu_define_option_name_02_utility(); //  $option_name 設定名
	$options = get_option($set_name);
	$option_name = 'change-frontend-list-more-text'; //個別配列名

	//テーブルに値がなかった場合の措置（PHP8.x以降への対応）
	if(isset($options[$option_name])){
		$checked = $options[$option_name];
	}else{
		$checked = '';
	}
?>
<label>
	<input type="checkbox" id="<?php echo esc_html($set_name . $option_name ); ?>" name="<?php echo esc_html($set_name . '[' .$option_name. ']'); ?>" class="wppd-ui-toggle" <?php checked( $checked , 1 ); ?> value="1">
	<p><?php esc_html_e('Change the "[...]" at the end of the excerpt set in the WordPress standard to "[...read more]" or change it to the string entered below.','hima-art-utility'); ?></p>
</label>
<?php
}

/*** [...]の代替文字列 ***/
/* 項目の追加とデータの更新 */
function haumenu_init_field_frontend_list_more_alternative_text(){
//項目の追加
	add_settings_field(
		'frontend-list-more-alternative-text', // 設定名
		'', // 設定タイトル
		'haumenu_frontend_list_more_alternative_text', // 設定項目のHTMLを出力する関数名
		haumenu_define_tab_slug_02_utility(), //表示させるタブのスラグ
		haumenu_define_section_id_02_utility(),// $section 表示させるセクションのID
		array( 'class' => 'ha-settings-convine' )
	);

}
add_action( 'admin_init', 'haumenu_init_field_frontend_list_more_alternative_text' );

/* 入力フォーム */
function haumenu_frontend_list_more_alternative_text() {
	$set_name = haumenu_define_option_name_02_utility(); //  $option_name 設定名
	$options = get_option($set_name);
	$option_name = 'frontend-list-more-alternative-text'; //個別配列名
?>
<div class="frontend-list-more-alternative-text-wrapper">
<label>
	<input name="<?php echo esc_html($set_name . '['.$option_name.']'); ?>" type="text" size="50" id="<?php echo esc_html($set_name . $option_name ); ?>" value="<?php echo esc_attr($options[ $option_name ] ?? ''); ?>">
	<p><?php esc_html_e('Enter if you want a string other than the standard "[...]" or "[...read more]" after enabling the function','hima-art-utility'); ?></p>
</label>
<p class="haup-admin-bk haup-admin-font-red"><?php esc_html_e('In the list using the query loop used in the block theme, the character string can be changed on the setting screen for each block (cannot be changed with this function)','hima-art-utility'); ?></p>
</div>
<?php
}


/*** お気に入りブロックの選択（グループ分け・安全版） ***/
/* 項目の追加とデータの更新 */
function haumenu_init_field_favorite_blocks(){
	add_settings_field(
		'favorite-blocks', // 設定名
		__('Favorite Blocks','hima-art-utility'), 
		'haumenu_favorite_blocks', // 設定項目のHTMLを出力する関数名
		haumenu_define_tab_slug_02_utility(), // 表示させるタブのスラグ
		haumenu_define_section_id_02_utility(), // 表示させるセクションのID
		array( 'class' => 'ha-settings-separate' )
	);
}
add_action( 'admin_init', 'haumenu_init_field_favorite_blocks' );

/* 入力フォーム（手動グループ分け ＋ コア翻訳利用） */
function haumenu_favorite_blocks() {
	$set_name = haumenu_define_option_name_02_utility(); // 設定名（親配列）
	$options = get_option($set_name);
	$option_name = 'favorite-blocks'; // 個別配列名

	// 現在保存されている選択済みのブロック
	$selected_blocks = isset($options[$option_name]) && is_array($options[$option_name]) ? $options[$option_name] : array();

	// 1. WordPressに登録されている全ブロック情報を取得
	$registry = WP_Block_Type_Registry::get_instance();
	$all_blocks = $registry->get_all_registered();

// 2. 基本カテゴリーのベース配列（※ここは既存のまま）
	$category_labels = array(
		'text'    => __( 'Text', 'hima-art-utility' ),
		'media'   => __( 'Media', 'hima-art-utility' ),
		'design'  => __( 'Design', 'hima-art-utility' ),
		'widgets' => __( 'Widgets', 'hima-art-utility' ),
		'theme'   => __( 'Theme', 'hima-art-utility' ),
		'embed'   => __( 'Embeds', 'hima-art-utility' ),
		'other'   => __( 'Other', 'hima-art-utility' ),
		'reusable' => __('REUSABLE','hima-art-utility'),
		'haup-favorite-block-category' => __('Items moved to favorites','hima-art-utility'),
	);

	// グループ配列の初期化（動的に追加できるように、ここでは枠を作らないか、ベースだけ用意）
	$grouped_blocks = array();
	foreach ( array_keys($category_labels) as $cat_slug ) {
		$grouped_blocks[$cat_slug] = array();
	}

	// 3. 全ブロックをループして、親ブロックだけをカテゴリーごとに仕分け
	foreach ( $all_blocks as $name => $block ) {
		// 除外設定（core/missing などの排除）
		$exclude_blocks = array( 'core/missing', 'core/freeform' );
		if ( in_array( $name, $exclude_blocks, true ) ) {
			continue;
		}

		// 子ブロックはスキップ
		if ( ! empty( $block->parent ) ) {
			continue;
		}

		// ブロックのカテゴリーを取得（未定義ならother）
		$cat = ! empty( $block->category ) ? $block->category : 'other';
		
		// ★【改良】定義外の独自カテゴリー（プラグイン製など）が来たら、新しいグループをその場で作る
		if ( ! isset( $grouped_blocks[$cat] ) ) {
			$grouped_blocks[$cat] = array();
			// 見出し用のラベルを「[拡張] VK-BLOCKS」のような分かりやすい表記にする
			$category_labels[$cat] = strtoupper( $cat ); 
		}

		$grouped_blocks[$cat][$name] = $block;
	}
?>
<p><?php esc_html_e( 'You can move the selected blocks to the top of the block list and display them in a consolidated manner.', 'hima-art-utility' ); ?></p>
<!-- スクロールボックス -->
	<div style="border: 1px solid #8c8f94; background: #fff; max-width: 450px; height: 350px; overflow-y: scroll; padding: 12px; box-sizing: border-box;">
		<?php
		// カテゴリーごとにループして出力
		foreach ( $grouped_blocks as $cat_slug => $blocks ) {
			// そのカテゴリーに親ブロックが1つもない場合は見出しを表示しない
			if ( empty( $blocks ) ) {
				continue;
			}
			?>
			<!-- グループの見出し（WordPressコアの翻訳テキストを出力） -->
			<div style="font-weight: bold; background: #f0f0f1; padding: 4px 8px; margin: 12px 0 8px 0; border-left: 4px solid #2271b1; font-size: 0.95em;">
				<?php echo esc_html( $category_labels[$cat_slug] ); ?>
			</div>

			<?php
			foreach ( $blocks as $name => $block ) {
				$title = ! empty( $block->title ) ? $block->title : $name;
				$checked = in_array( $name, $selected_blocks, true ) ? ' checked' : '';
				?>
				<div style="margin-bottom: 6px; padding-left: 8px;">
					<label style="display: inline-flex; align-items: center; cursor: pointer; gap: 8px;">
						<input 
							type="checkbox" 
							name="<?php echo esc_attr($set_name . '[' . $option_name . '][]'); ?>" 
							value="<?php echo esc_attr( $name ); ?>" 
							<?php echo esc_html($checked); ?>
							style="margin: 0;"
						>
						<span style="font-size: 0.95em;"><?php echo esc_html( $title ); ?> <span style="color: #646970; font-size: 0.85em;">(<?php echo esc_html( $name ); ?>)</span></span>
					</label>
				</div>
				<?php
			}
		}
		?>
	</div>
<p class="haup-admin-bk haup-admin-font-red"><?php esc_html_e('The moved block will appear under "Blocks moved to favorites" at the end of the list above. Unchecking it and refreshing will return it to its original position.','hima-art-utility'); ?></p>
<?php
}