<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

function haup_init_editor_panel_js_cat_radio(){
	$script_name = 'haup-panel-js-category-radio';

	//投稿タイプを「投稿」に指定し、haup_is_single_filterで追加できるようにする
	$posttypes = 'post';
	$posttypes = apply_filters('haup_is_single_filter',$posttypes);
	//20250902 explodeだけでは空文字などがあった場合に不具合が出る可能性があるので修正
	$post_types_array = array_map('trim', explode(',', $posttypes));
	$post_types_array = array_filter($post_types_array);

	wp_enqueue_script(
		$script_name,
		plugin_dir_url( __FILE__ ) .'editor-panel.js',
		[ 'wp-plugins', 'wp-edit-post', 'wp-element', 'wp-components', 'wp-data', 'wp-i18n' ],
		haup_plugin_version(),
		array( 
			'strategy'  => 'defer',
			'in_footer' => true,// Note: This is the default value.
		)
	);

	//スクリプトに渡すための文字列と翻訳可能文字列を紐づけて配列にする
	$localize_val = array(
		'title' => __('Category', 'hima-art-utility'),
		'categories' => haup_get_category_list_for_js(),
		'post_types' => $post_types_array, //適用させる投稿タイプを配列で渡す
	);

	//wp_localize_scriptを使ってスクリプトへ配列を渡す
	wp_localize_script( $script_name , 'HaupLocalizeTextCatRadio', $localize_val);
}
add_action('enqueue_block_editor_assets','haup_init_editor_panel_js_cat_radio');

/*** JSに渡すカテゴリーデータの構築（確実に階層化する）***/
function haup_get_category_list_for_js() {
	// 全てのカテゴリーを取得（'parent' => 0 は付けない）
	$categories = get_terms( array(
		'taxonomy'   => 'category',
		'hide_empty' => false,
		'orderby'    => 'name',
	));

	if ( is_wp_error( $categories ) || empty( $categories ) ) {
		return array();
	}

	$category_map = array();
	$list = array();

	// 1. まず全てのカテゴリーをIDをキーにした配列に入れる
	foreach ( $categories as $cat ) {
		$category_map[ $cat->term_id ] = array(
			'id'       => (string)$cat->term_id,
			'name'     => $cat->name,
			'parent'   => (int)$cat->parent,
			'children' => array(),
		);
	}

	// 2. 親子関係を組み立てる
	foreach ( $category_map as $id => &$cat_data ) {
		if ( $cat_data['parent'] === 0 ) {
			// 最上位階層ならリストの直下に追加
			$list[] = &$cat_data;
		} else {
			// 親が存在すれば、その親の 'children' 配列に追加
			if ( isset( $category_map[ $cat_data['parent'] ] ) ) {
				$category_map[ $cat_data['parent'] ]['children'][] = &$cat_data;
			}
		}
	}

	return $list;
}

/*** クイック編集に注意書きを追加するJavaScriptを管理画面に出力 ***/
function haup_add_quick_edit_single_category_note() {
	if ( ! is_admin() ) return;

	$notice_text = __('The "Single Category Selection" function of the Hima Art Utility plugin is enabled, so when you save, only the smallest category ID is automatically selected. Disable this function to be able to select and save multiple categories.', 'hima-art-utility');
?>
<script type="text/javascript">
(function($) {
	$(document).ready(function() {
		// 監視対象：投稿一覧のテーブル本体
		const target = document.getElementById('the-list');
		if (!target) return;

		// クイック編集行が挿入されたら実行する関数
		const observer = new MutationObserver(function(mutations) {
			mutations.forEach(function(mutation) {
				mutation.addedNodes.forEach(function(node) {
					// 追加された要素がクイック編集行（.inline-edit-row）か確認
					const $editRow = $(node);
					if ($editRow.hasClass('inline-edit-row')) {
                        
						const $categoryChecklist = $editRow.find('.category-checklist');
                        
						// すでに注釈があるかチェック（二重表示防止）
						if ($categoryChecklist.length && $editRow.find('.pwcn-category-limit-note').length === 0) {
							const noteHtml = `<p class="pwcn-category-limit-note" style="background-color: #f4ffe6; border: 1px solid #67b00b; padding: 8px; margin: 0 0 10px 0; font-size: 0.8rem; color: #555; font-weight:500;"><?php echo esc_js( $notice_text ); ?></p>`;
                            
							$categoryChecklist.before(noteHtml);
						}
					}
				});
			});
		});

		// 監視の開始
		observer.observe(target, { childList: true });
	});
})(jQuery);
</script>
<?php
}
add_action('admin_footer', 'haup_add_quick_edit_single_category_note');