<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否
/*** 非表示グループのスタイルは以下のファイルに記述しているので注意 ***/
/* /init-style/functions/message-text.php */

/* グループ用スクリプトの読み込み */
function haup_block_group_animate_init() {
	//アニメーション
	wp_enqueue_script( 'haup-group-animate');

	//クリックして表示
	wp_enqueue_script( 'haup-group-click-to-show');

	//クリックして表示でスクリプトに渡すもの
	$no_name_text = __('No Name','hima-art-utility');
	
	wp_localize_script(
		'haup-group-click-to-show', 'haupData', array(
			'postID' => get_the_ID() ?: 0,
			'apiURL' => esc_url(rest_url('haup/v1/track-click')),
			'noName' => esc_html( $no_name_text )
		)
	);
}
add_action('wp_enqueue_scripts','haup_block_group_animate_init');

function haup_register_block_design_styles_group() {

/* グループ　黒板風 */
	register_block_style('core/group', array(
	'name' =>  'ha-group-kokuban',
	'label' => __( 'Blackboard','hima-art-utility'),
  ));

/* グループ　Upアニメーション */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-up',
	'label' => __( 'Up Animation','hima-art-utility'),
  ));

/* グループ　downアニメーション */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-down',
	'label' => __( 'Down Animation','hima-art-utility'),
  ));

/* グループ　Leftアニメーション */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-left',
	'label' => __( 'To Left Animation','hima-art-utility'),
  ));

/* グループ　Rightアニメーション */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-right',
	'label' => __( 'To Right Animation','hima-art-utility'),
  ));

/* グループ　Upアニメーション（ゆっくり） */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-up-slow',
	'label' => __( 'Up Animation Slow','hima-art-utility'),
  ));

/* グループ　downアニメーション（ゆっくり） */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-down-slow',
	'label' => __( 'Down Animation Slow','hima-art-utility'),
  ));

/* グループ　Leftアニメーション（ゆっくり） */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-left-slow',
	'label' => __( 'To Left Animation Slow','hima-art-utility'),
  ));

/* グループ　Rightアニメーション（ゆっくり） */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-right-slow',
	'label' => __( 'To Right Animation Slow','hima-art-utility'),
  ));

/* グループ　フェードイン */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-fadein',
	'label' => __( 'Fade In','hima-art-utility'),
  ));

/* グループ　フェードイン（ゆっくり） */
	register_block_style('core/group', array(
	'name' =>'u-fade-type-fadein-slow',
	'label' => __( 'Fade In Slow','hima-art-utility'),
  ));

/* グループ　非表示 */
	register_block_style('core/group', array(
	'name' =>'ha-under-const',
	'label' => __( 'Front Hidden','hima-art-utility'),
  ));

/* グループ　パソコン時のみ段組み */
/* 2列 */
register_block_style( 'core/group',
	array(
	'name' => 'ha-group-column2-pc',
	'label' => __( '2Columns(pc)','hima-art-utility' ),
	'inline_style' => 'body.is-pc .is-style-ha-group-column2-pc{column-count: 2;}body.post-php .is-style-ha-group-column2-pc{column-count: 2;}',
	)
);

/* 3列 */
register_block_style( 'core/group',
	array(
	'name' => 'ha-group-column3-pc',
	'label' => __( '3Columns(pc)','hima-art-utility' ),
	'inline_style' => 'body.is-pc .is-style-ha-group-column3-pc{column-count: 3;}body.post-php .is-style-ha-group-column3-pc{column-count: 3;}',
	)
);

/* 4列 */
register_block_style( 'core/group',
	array(
	'name' => 'ha-group-column4-pc',
	'label' => __( '4Columns(pc)','hima-art-utility' ),
	'inline_style' => 'body.is-pc .is-style-ha-group-column4-pc{column-count: 4;}body.post-php .is-style-ha-group-column4-pc{column-count: 4;}',
	)
);

/* グループ　すべてのデバイスで段組み */
/* 2列 */
register_block_style( 'core/group',
	array(
	'name' => 'ha-group-column2',
	'label' => __( '2Columns(all)','hima-art-utility' ),
	'inline_style' => '.is-style-ha-group-column2{column-count: 2;}body.post-php .is-style-ha-group-column2{column-count: 2;}',
	)
);

/* 3列 */
register_block_style( 'core/group',
	array(
	'name' => 'ha-group-column3',
	'label' => __( '3Columns(all)','hima-art-utility' ),
	'inline_style' => '.is-style-ha-group-column3{column-count: 3;}body.post-php .is-style-ha-group-column3{column-count: 3;}',
	)
);

/* 4列 */
register_block_style( 'core/group',
	array(
	'name' => 'ha-group-column4',
	'label' => __( '4Columns(all)','hima-art-utility' ),
	'inline_style' => '.is-style-ha-group-column4{column-count: 4;}body.post-php .is-style-ha-group-column4{column-count: 4;}',
	)
);

/* クリックして表示 */
register_block_style( 'core/group',
	array(
	'name' => 'haup-click-to-reveal',
	'label' => __( 'Click to view','hima-art-utility' ),
	'inline_style' => '',
	)
);

/*  */
/*
	register_block_style('core/list', array(
	'name' =>  '',
	'label' => __( '','hima-art-utility'),
  ));
*/
}
add_action('init','haup_register_block_design_styles_group');

/********** 条件分岐 **********/
/*** グループブロックで条件分岐 ***/
/* ブロックスタイルの登録 */
function haup_conditional_group_block_style(){
	$target_blocks = ['core/group', 'core/column'];

	foreach ($target_blocks as $block) {
		// 管理者のみ
		$for_admin_message = __('This area is only visible to users with administrator privileges.','hima-art-utility');

		register_block_style(
			$block,
			[
				'name' => 'haup-cond-admin-only',
				'label' => __('Admin only','hima-art-utility'),
				'inline_style' => '
					.is-style-haup-cond-admin-only {outline: 2px dashed #ff4d4d; position: relative; margin-top: 1.5rem !important;}
					.is-style-haup-cond-admin-only::before {content: "'.esc_html( $for_admin_message ).'";position: absolute; top: -1.5rem; left: 0;font-size: 11px; background: #ff4d4d; color: #fff;padding: 2px 8px; border-radius: 3px; font-weight: bold;z-index: 10;}'
			]
		);

		// ログインユーザーのみ
		$for_logged_in_message = __('This area is only visible to logged in users','hima-art-utility');
		register_block_style(
			$block,
			[
				'name' => 'haup-cond-login-only',
				'label' => __('Members only','hima-art-utility'),
				'inline_style' => '
					.block-editor-block-list__block.is-style-haup-cond-login-only {outline: 2px dashed #2271b1;position: relative;margin-top: 1.5rem !important; }
					.block-editor-block-list__block.is-style-haup-cond-login-only::before {content: "'.esc_html( $for_logged_in_message ).'";position: absolute; top: -1.5rem; left: 0;font-size: 11px; background: #2271b1; color: #fff;padding: 2px 8px; border-radius: 3px; font-weight: bold;z-index: 10;}'
			]
		);

		// ログインユーザーのみ（メッセージ付き）
		$force_login_message = __('This area is only visible to logged in users, and a message is displayed to non-logged in users.','hima-art-utility');
		register_block_style(
			$block,
			[
				'name' => 'haup-cond-login-only-with-message',
				'label' => __('Members only (with M)','hima-art-utility'),
				'inline_style' => '
					.block-editor-block-list__block.is-style-haup-cond-login-only-with-message{outline: 2px dashed #22b147;position: relative;margin-top: 1.5rem !important; }
					.block-editor-block-list__block.is-style-haup-cond-login-only-with-message::before {content: "'.esc_html( $force_login_message ).'";position: absolute; top: -1.5rem; left: 0;font-size: 11px; background: #22b147; color: #fff;padding: 2px 8px; border-radius: 3px; font-weight: bold;z-index: 10;}'
			]
		);
	}
}
add_action('init','haup_conditional_group_block_style');

/* HTML出力時（レンダリング時）に条件によって出力／非出力 */
function haup_conditional_group_output( $block_content, $block ){
	if ( is_admin() ) return $block_content;

	// どんなクラス名が来ても「haup-cond」という文字がHTMLに含まれていれば判定開始
	if ( strpos( $block_content, 'haup-cond' ) !== false ) {

		//完全ではないがより正確に条件分岐を動作させるためキャッシュを無効にする
		//DONOTCACHEPAGEが効かないキャッシュ機能を持つものがあることに留意
		//「cond-group-no-cache」でキャッシュを解除するかを判断
		$is_force_no_cache = GetOP01_utility()['cond-group-no-cache'];
		if ( $is_force_no_cache == '1' && !defined( 'DONOTCACHEPAGE' ) ) {
			define( 'DONOTCACHEPAGE', true );
		}
		//if ( !defined( 'DONOTCACHEPAGE' ) ) define( 'DONOTCACHEPAGE', true );

		// 管理者制限が含まれる場合
		if ( strpos( $block_content, 'haup-cond-admin-only' ) !== false ) {
			if ( !current_user_can( 'manage_options' ) ) return '';
		}

		// ログイン制限が含まれる場合（メッセージなし）
		if ( strpos( $block_content, 'haup-cond-login-only' ) !== false && strpos( $block_content, 'with-message' ) === false ) {
			if ( !is_user_logged_in() ) return '';
		}

		// ログイン制限（メッセージ付き）が含まれる場合
		if ( strpos( $block_content, 'haup-cond-login-only-with-message' ) !== false ) {

			/***** get_optionで設定から値を引っ張ってくる *****/
			$id_value = '';
			$id_value = GetOP01_utility()['cond-group-block-login-pattern-id'];

			if( isset( $id_value )){
				$reuse_id = $id_value;
			}else{
				$reuse_id = '';
			}

			if ( !is_user_logged_in() ) {
				// 1. IDがあり、かつ投稿が存在するかチェック
				if ( !empty( $reuse_id ) ) {
					$post = get_post( $reuse_id );

					if ( $post && $post->post_type === 'wp_block' ) {
						return do_blocks( $post->post_content );
					}
				}

				// 2. IDが空、もしくは指定されたパターンが存在しない場合はここを実行
				$login_url = wp_login_url( get_permalink() );
				$message_1 = __('This content is for members only','hima-art-utility');
				$message_2 = __('Log in to continue reading','hima-art-utility');
				return '
					<div class="haup-login-msg" style="border:2px solid #22b147; padding:2em; background:#f9fffb; text-align:center;">
					<p style="font-weight:bold;">'.esc_html( $message_1 ).'</p>
					<a href="' . esc_url($login_url) . '" style="color:#22b147; text-decoration:underline;">'.esc_html( $message_2 ).'</a>
					</div>
				';
			}
 		}
	}

	return $block_content;
}
add_filter('render_block', 'haup_conditional_group_output', 99, 2);

/*** グループアニメーション指定しているグループを強調表示 ***/
function haup_group_animation_editor_style_init(){
	$text = __('This group has "Animation" selected in the block styling','hima-art-utility');
$custom_css = '
/* 計測スタイルが適用されたグループブロックの外枠を強調 */
.wp-block-group.is-style-u-fade-type-up,
.wp-block-group.is-style-u-fade-type-down,
.wp-block-group.is-style-u-fade-type-left,
.wp-block-group.is-style-u-fade-type-right,
.wp-block-group.is-style-u-fade-type-up-slow,
.wp-block-group.is-style-u-fade-type-down-slow,
.wp-block-group.is-style-u-fade-type-left-slow,
.wp-block-group.is-style-u-fade-type-fadein,
.wp-block-group.is-style-u-fade-type-fadein-slow
{
	border: 1px dashed #b15722!important; /* 緑の破線 */
	position: relative;
	padding-top: 25px !important;
	margin-top: 2rem !important;
	background: unset!important; /* reveralというスタイルで色が付くようなので解除 */
	max-height:unset;
}
/* 左上にラベルを表示 */
.wp-block-group.is-style-u-fade-type-up::before,
.wp-block-group.is-style-u-fade-type-down::before,
.wp-block-group.is-style-u-fade-type-left::before,
.wp-block-group.is-style-u-fade-type-right::before,
.wp-block-group.is-style-u-fade-type-up-slow::before,
.wp-block-group.is-style-u-fade-type-down-slow::before,
.wp-block-group.is-style-u-fade-type-left-slow::before,
.wp-block-group.is-style-u-fade-type-fadein::before,
.wp-block-group.is-style-u-fade-type-fadein-slow::before
{
	content: "'.esc_html( $text ).'";
	position: absolute;
	top: -1.5rem;
	left: 0;
	background: #b15722;
	color: white;
	font-size: 0.8rem;
	padding: 2px 8px;
	border-radius: 0 0 4px 0;
}
';

	wp_add_inline_style( 'wp-edit-blocks', $custom_css );
}
add_action('enqueue_block_editor_assets','haup_group_animation_editor_style_init');


/*** クリックして表示機能のプログラム ***/
// 2. REST API エンドポイントの登録
/* 「haup/v1」から変更したらサイト全体のセキュリティ機能でREST APIのルートを変更すること */
function haup_click_to_show_group_rest_init(){
	register_rest_route( 'haup/v1', '/track-click', [
		'methods'             => 'POST',
		'callback'            => 'haup_handle_group_click_tracking',
		'permission_callback' => '__return_true', // 公開API
	]
	);
}
add_action('rest_api_init','haup_click_to_show_group_rest_init');

// 3. クリックデータの保存処理 (投稿メタに連想配列で保存)
function haup_handle_group_click_tracking( $request ) {
	$no_name_text = __('No Name','hima-art-utility');
	$post_id  = (int) $request->get_param( 'post_id' );
	$block_id = sanitize_text_field( $request->get_param( 'block_id' ) ) ?: 'No_Name';

	if ( ! $post_id ) return new WP_Error( 'no_id', 'Post ID is required', [ 'status' => 400 ] );

	// 既存の統計データを取得
	$stats = get_post_meta( $post_id, 'haup_click_show_group_block_stats', true );
	if ( ! is_array( $stats ) ) {
		$stats = [];
	}

	// 特定のブロックIDのカウントを更新
	if ( ! isset( $stats[ $block_id ] ) ) {
		$stats[ $block_id ] = 0;
	}

	$stats[ $block_id ]++;

	update_post_meta( $post_id, 'haup_click_show_group_block_stats', $stats );

	// ...クリック数をカウントアップする処理の直後に追加
	if(isset( GetOP01_utility()['send-mail-at-group-clicked'] ) && GetOP01_utility()['send-mail-at-group-clicked']){
		haup_send_click_notification( $post_id, $block_id );
	}

	return [ 'success' => true, 'target' => $block_id, 'new_count' => $stats[ $block_id ] ];
}

/*** 投稿編集サイドバーにクリック統計パネルを表示 ***/
/* メタパネル表示用スクリプトの読み込み（WordPress7.0以降対応用） */
function haup_init_editor_panel_js_group_click_count(){
	$script_name = 'haup-panel-js-group-click-count';

	// 1. 現在のエディターで編集中の投稿IDを取得する
	$post_id = get_the_ID(); 
    
	// もし get_the_ID() で取れない場合（稀なケース）の予備策
	if ( ! $post_id && isset( $_GET['post'] ) ) {
		$post_id = absint( $_GET['post'] );
	}

	$script_name = 'haup-panel-js-group-click-count';

	//投稿タイプを「投稿」に指定し、haup_is_single_filterで追加できるようにする
	$posttypes = 'post,page';
	$posttypes = apply_filters('haup_is_single_filter',$posttypes);
	$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__ ) .'bd-function-group.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.
		)
	);

	//統計情報を変数化（コールバック関数を変数化）
	$result = haup_group_block_click_count_panel_callback( $post_id );

	//スクリプトに渡すための文字列と翻訳可能文字列を紐づけて配列にする
	$localize_val = array(
		'title' => __('Group Click Count Report','hima-art-utility'),
		'info' => __('This displays statistics on how many times groups selected as "Click to show" were clicked.','hima-art-utility'),
		'post_types' => $post_types_array, //適用させる投稿タイプを配列で渡す
		'click_result' => $result,
	);

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

function haup_group_block_click_count_panel_callback($post_id = 0){
	// $post_id が 0 の場合は、再度取得を試みるか、空を返す
	if ( ! $post_id ) {
		$post_id = get_the_ID();
	}
    
	// それでも ID が取れない場合は「データなし」メッセージを返す
	if ( ! $post_id ) {
		return '<p style="color:#666;">' . __('Could not determine post ID.', 'hima-art-utility') . '</p>';
	}

	$stats = get_post_meta( $post_id, 'haup_click_show_group_block_stats', true );
    
	// データがない場合
	if ( ! $stats || ! is_array( $stats ) ) {
		$no_stats_message = __('There is no data yet. Click on the front to display it here.', 'hima-art-utility');
		return '<p style="color:#666;">' . esc_html( $no_stats_message ) . '</p>';
	}

	$block_id_text = __('Block ID', 'hima-art-utility');
	$click_count_text = __('Counts', 'hima-art-utility');
	$description_text = __('* If you give a name to the groups "Advanced Settings" → "HTML Anchor", that name will be displayed here.', 'hima-art-utility');

	// HTMLを組み立て
	$output = '<table style="width:100%; border-collapse:collapse; font-size:12px; border:1px solid #ddd; margin-bottom:10px;">';
	$output .= '<thead style="background:#f9f9f9;"><tr style="border-bottom:1px solid #ddd;"><th align="left" style="padding:8px;">' . esc_html( $block_id_text ) . '</th><th align="right" style="padding:8px;">' . esc_html( $click_count_text ) . '</th></tr></thead>';
	$output .= '<tbody>';
    
	foreach ( $stats as $id => $count ) {
		$output .= "<tr style='border-bottom:1px solid #eee;'><td style='padding:8px;'><code>" . esc_html( $id ) . "</code></td><td align='right' style='padding:8px;'><strong>" . absint( $count ) . "</strong></td></tr>";
	}
    
	$output .= '</tbody></table>';
	$output .= '<p style="font-size:11px; color:#888; line-height:1.4;">' . esc_html( $description_text ) . '</p>';

	return $output;
}

/*** プラグインの設定画面内にクリック統計メニューを追加 ***/
function haup_add_group_click_stats_menu() {
	$menu_page_title = __('Group Click Stats','hima-art-utility');
	$menu_title = __('Click Stats','hima-art-utility');

	// カスタム投稿タイプのサブメニューを追加
		add_submenu_page(
			'haumenu-admin-page', // 親メニューのスラッグ
			$menu_page_title, // サブメニューのページタイトル
			$menu_title, // サブメニューのタイトル
			'manage_options', // 権限
			'haumenu-group-click-stats-page', // サブメニューのスラッグ
			'haup_group_click_stats_page'
		);
}
add_action('admin_menu', 'haup_add_group_click_stats_menu');

/*** 統計画面の内容 ***/
function haup_group_click_stats_page(){
	// 現在のソート設定を取得（デフォルトはクリック数の降順）
	$orderby = isset($_GET['orderby']) ? sanitize_text_field($_GET['orderby']) : 'count';
	$order   = isset($_GET['order']) && $_GET['order'] === 'asc' ? 'asc' : 'desc';

	// デフォルトの投稿タイプ（配列）
	$default_posttypes = array('post', 'page');

	// フィルター適用（配列が返ってくることを期待）
	$post_types_array = apply_filters('haup_click_group_report_pt_filter', $default_posttypes);

	// 念のため配列であることを確認し、空要素を除去
	if ( ! is_array( $post_types_array ) ) {
		$post_types_array = array('post', 'page'); // フォールバック
	}
	$post_types_array = array_filter( array_map('trim', $post_types_array) );

	$all_posts = get_posts([
		'post_type'      => $post_types_array, 
		'posts_per_page' => -1, 
		'post_status'    => 'any'
	]);

	$no_name_id_text = __('(No Title / ID:','hima-art-utility');

	$display_data = array();
	if ( ! empty( $all_posts ) ) {
		foreach ( $all_posts as $post ) {
			$stats = get_post_meta( $post->ID, 'haup_click_show_group_block_stats', true );
			if ( is_array( $stats ) && ! empty( $stats ) ) {
				foreach ( $stats as $block_id => $count ) {
					$display_data[] = array(
						'post_id'  => $post->ID,
						'title'    => get_the_title( $post->ID ) ?: esc_html( $no_name_id_text ) . $post->ID . ')',
						'block_id' => $block_id,
						'count'    => intval($count),
						'edit_url' => get_edit_post_link($post->ID),
						'view_url' => get_permalink($post->ID)
					);
				}
			}
		}
	}

	// --- ソートロジック ---
	usort($display_data, function($a, $b) use ($orderby, $order) {
		if ( $orderby === 'title' ) {
			$res = strnatcasecmp($a['title'], $b['title']); // 自然順・大文字小文字無視
		} elseif ( $orderby === 'block_id' ) {
			$res = strnatcasecmp($a['block_id'], $b['block_id']);
		} else {
			$res = $a['count'] <=> $b['count']; // 数値比較
		}
		return ( $order === 'asc' ) ? $res : -$res; // 降順なら結果を反転
	});

	// 次のソート順を決定する補助関数（現在の順序と逆を返す）
	$toggle_order = ($order === 'asc') ? 'desc' : 'asc';
	$base_url = admin_url('admin.php?page=haumenu-group-click-stats-page');

	if ( isset($_GET['message']) ) {
		echo '<div class="updated"><p>' . esc_html($_GET['message']) . '</p></div>';
	}

	//画面内のテキストを変数化
	$report_page_title = __('Click Statistics report for the Click to View group','hima-art-utility');
	$report_reset_confirm = __('Reset all site-wide statistics?','hima-art-utility');
	$report_all_reset_button_title = __('Reset site-wide statistics','hima-art-utility');
	$report_post_title_text = __('Post title','hima-art-utility');
	$report_block_id_text = __('Block ID','hima-art-utility');
	$report_click_count_text = __('Clicks','hima-art-utility');
	$report_view_page_text = __('View page','hima-art-utility');
	$report_sp_delete_text = __('Individual data deletion','hima-art-utility');
	$report_view_page_link_text = __('View this page','hima-art-utility');
	$report_sp_delete_link_text = __('Delete this data','hima-art-utility');
	$report_sp_reset_confirm = __('Do you want to delete it?','hima-art-utility');
	$report_no_data_text = __('No data','hima-art-utility');

?>
<div class="wrap">
	<h1><?php echo esc_html( $report_page_title ); ?></h1>
	
	<div style="margin: 20px 0;">
		<a href="<?php echo esc_url( wp_nonce_url( $base_url . '&action=haup_reset_click_group_stats', 'haup_reset_click_group_stats_action' ) ); ?>" 
		   class="button button-secondary" 
		   onclick="return confirm( '<?php echo esc_html( $report_reset_confirm ); ?>' );">
			<?php echo esc_html( $report_all_reset_button_title ); ?>
		</a>
	</div>

	<table class="wp-list-table widefat fixed striped">
		<thead>
			<tr>
				<th style="width: 40%;"><a href="<?php echo esc_url( $base_url ); ?>&orderby=title&order=<?php echo esc_html( $toggle_order ); ?>"><?php echo esc_html( $report_post_title_text ); ?> <span class="dashicons dashicons-sort"></span></a></th>
				<th style="width: 20%;"><a href="<?php echo esc_url( $base_url ); ?>&orderby=block_id&order=<?php echo esc_html( $toggle_order ); ?>"><?php echo esc_html( $report_block_id_text ); ?> <span class="dashicons dashicons-sort"></span></a></th>
				<th style="width: 10%;"><a href="<?php echo esc_url( $base_url ); ?>&orderby=count&order=<?php echo esc_html( $toggle_order ); ?>"><?php echo esc_html( $report_click_count_text ); ?> <span class="dashicons dashicons-sort"></span></a></th>
				<th style="width: 15%;"><?php echo esc_html( $report_view_page_text ); ?></th>
				<th style="width: 15%;"><?php echo esc_html( $report_sp_delete_text ); ?></th>
			</tr>
		</thead>
		<tbody>
			<?php if ( ! empty( $display_data ) ) : ?>
				<?php foreach ( $display_data as $item ) : 
					$reset_url = wp_nonce_url( 
						$base_url . "&action=haup_reset_click_group_stats&post_id={$item['post_id']}&block_id=" . urlencode($item['block_id']), 
						'haup_reset_click_group_stats_action' 
					);
				?>
				<tr>
					<td><strong><a href="<?php echo esc_url( $item['edit_url'] ); ?>"><?php echo esc_html($item['title']); ?></a></strong></td>
					<td><code><?php echo esc_html($item['block_id']); ?></code></td>
					<td><span class="badge" style="background:#22b147; color:#fff; padding:2px 10px; border-radius:12px; font-weight:bold;"><?php echo number_format($item['count']); ?></span></td>
					<td><a href="<?php echo esc_url( $item['view_url'] ); ?>" target="_blank"><span class="dashicons dashicons-external"></span><?php echo esc_html( $report_view_page_link_text ); ?></a></td>
					<td>
						<a href="<?php echo esc_url( $reset_url ); ?>" style="color: #b32d2e; text-decoration: none;" onclick="return confirm('<?php echo esc_html( $report_sp_reset_confirm ); ?>');">
							<span class="dashicons dashicons-trash"></span><?php echo esc_html( $report_sp_delete_link_text ); ?>
						</a>
					</td>
				</tr>
				<?php endforeach; ?>
			<?php else : ?>
				<tr><td colspan="5" style="padding:30px; text-align:center;"><?php echo esc_html( $report_no_data_text ); ?></td></tr>
			<?php endif; ?>
		</tbody>
	</table>
</div>
<?php
}

/*** 管理画面の処理：個別ブロックまたは全リセットの動作 ***/
function haup_group_click_stats_reset_actions(){
	if ( isset($_GET['action']) && $_GET['action'] === 'haup_reset_click_group_stats' ) {
		if ( ! current_user_can('manage_options') ) return;
		check_admin_referer('haup_reset_click_group_stats_action');

		$post_id = isset($_GET['post_id']) ? intval($_GET['post_id']) : 0;
		$block_id = isset($_GET['block_id']) ? sanitize_text_field($_GET['block_id']) : '';

		if ( $post_id && $block_id ) {
			// 【特定投稿の特定ブロック】だけを削除
			$stats = get_post_meta( $post_id, 'haup_click_show_group_block_stats', true );

			if ( is_array($stats) && isset($stats[$block_id]) ) {
				unset($stats[$block_id]); // 指定したIDだけ消す

				if ( empty($stats) ) {
					delete_post_meta( $post_id, 'haup_click_show_group_block_stats' );
				} else {
					update_post_meta( $post_id, 'haup_click_show_group_block_stats', $stats );
				}

				$message_text = __('The following statistics have been removed:','hima-art-utility');
				$message = esc_html( $message_text ).$block_id;
			}
		} elseif ( ! $post_id ) {
			// 【サイト全体】をリセット
			$all_posts = get_posts(['post_type' => ['post', 'page'], 'posts_per_page' => -1,'post_status' => 'any']);

			foreach ( $all_posts as $p ) {
				delete_post_meta( $p->ID, 'haup_click_show_group_block_stats' );
			}

			$message = __('Reset all group click statistics','hima-art-utility');
		}

		wp_safe_redirect( admin_url('admin.php?page=haumenu-group-click-stats-page&message=' . urlencode($message)) );
		exit;
	}
}
add_action('admin_init','haup_group_click_stats_reset_actions');

/*** ブロックID列の部分の名称を変更 ***/
/* ブロック一覧上で名前を変更していればその名前を出力 */
function haup_group_click_stats_change_name($block_content, $block){
	// 1. 対象のスタイルが適用されているかチェック
	if ( isset( $block['attrs']['className'] ) && strpos( $block['attrs']['className'], 'is-style-haup-click-to-reveal' ) !== false ) {
        
		// 2. エディターで付けた「名前」を取得（なければ空）
		$custom_name = $block['attrs']['metadata']['name'] ?? '';
        
		if ( ! empty( $custom_name ) ) {
			// 3. 最初のタグ（<div ...）の中に data-haup-label を安全に差し込む
			// IDや他の属性を上書きせず、単に新しい属性を追加するだけです
			$block_content = preg_replace(
				'/(<[a-z0-9]+)/i', 
				'$1 data-haup-label="' . esc_attr( $custom_name ) . '"', 
				$block_content, 
				1
			);
		}
	}

	return $block_content;
}
add_filter('render_block','haup_group_click_stats_change_name', 10, 2);

function haup_group_click_to_show_editor_style_init(){
	$text = __('This group has "Click to reveal" selected in the block styling','hima-art-utility');
$custom_css = '
/* 計測スタイルが適用されたグループブロックの外枠を強調 */
.wp-block-group.is-style-haup-click-to-reveal {
	border: 1px dashed #7f22b1!important; /* 緑の破線 */
	position: relative;
	padding-top: 25px !important;
	margin-top: 10px !important;
	background: unset!important; /* reveralというスタイルで色が付くようなので解除 */
	max-height:unset;
}
/* 左上にラベルを表示 */
.wp-block-group.is-style-haup-click-to-reveal::before {
	content: "'.esc_html( $text ).'";
	position: absolute;
	top: 0;
	left: 0;
	background: #7f22b1;
	color: white;
	font-size: 0.8rem;
	padding: 2px 8px;
	border-radius: 0 0 4px 0;
}
';

	wp_add_inline_style( 'wp-edit-blocks', $custom_css );
}
add_action('enqueue_block_editor_assets','haup_group_click_to_show_editor_style_init');

/*** ダッシュボードに簡易ウィジェットを追加 ***/
function haup_add_group_clicks_dashboard_widgets() {
	wp_add_dashboard_widget(
		'haup-group-click-widget',
		__('Top 10 Clicked Content', 'hima-art-utility'),
		'haup_add_group_clicks_dashboard_widgets_callback'
	);
}
add_action('wp_dashboard_setup', 'haup_add_group_clicks_dashboard_widgets');

function haup_add_group_clicks_dashboard_widgets_callback() {
	global $wpdb;
	$meta_key = 'haup_click_show_group_block_stats'; 

	// phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery , WordPress.DB.DirectDatabaseQuery.NoCaching
	$results = $wpdb->get_results( $wpdb->prepare( "
		SELECT post_id, meta_value 
		FROM $wpdb->postmeta 
		WHERE meta_key = %s
	", $meta_key ) );

	if ( $results ) {
		$all_stats = [];

		// 1. 全投稿の全グループデータを一つの配列にフラットに集約
		foreach ( $results as $row ) {
			$data = maybe_unserialize( $row->meta_value );

			if ( ! is_array( $data ) ) continue;

			$post_title = get_the_title( $row->post_id );

			if ( ! $post_title ) continue; 

			$edit_link = get_edit_post_link( $row->post_id );

			foreach ( $data as $group_id => $val ) {
				$clicks = 0;

				if ( is_array( $val ) && isset( $val['clicks'] ) ) {
					$clicks = intval( $val['clicks'] );
				} elseif ( is_numeric( $val ) ) {
					$clicks = intval( $val );
				}

				if ( $clicks === 0 ) continue;

				$all_stats[] = [
					'title'  => $post_title,
					'group'  => $group_id,
					'clicks' => $clicks,
					'link'   => $edit_link
				];
			}
		}

		// 2. 【重要】クリック数で降順（大きい順）にソート
		usort( $all_stats, function( $a, $b ) {
			return $b['clicks'] <=> $a['clicks'];
		} );

		// 3. 上位10件だけを切り出す
		$top_10 = array_slice( $all_stats, 0, 10 );

		if ( empty( $top_10 ) ) {
			$no_click_data_text = __( 'No click data recorded yet.', 'hima-art-utility' );
			echo '<p>' . esc_html( $no_click_data_text ) . '</p>';
			return;
		}

		// 4. テーブル出力
		$post_tilte_column_text = __( 'Post title', 'hima-art-utility' );
		$block_id_column_text = __( 'Block ID', 'hima-art-utility' );
		$clicks_column_text = __( 'Clicks', 'hima-art-utility' ) ;

		echo '<div class="main">';
		echo '<table class="widefat fixed striped" style="border: none; box-shadow: none; background: transparent;">';
		echo '<thead><tr>';
		echo '<th style="width:50%;">' . esc_html( $post_tilte_column_text ) . '</th>';
		echo '<th style="width:30%;">' . esc_html( $block_id_column_text ) . '</th>';
		echo '<th style="width: 20%; text-align: right;">' . esc_html( $clicks_column_text ) . '</th>';
		echo '</tr></thead><tbody>';

		foreach ( $top_10 as $item ) {
			echo '<tr>';
			echo '<td class="column-primary"><strong><a href="' . esc_url( $item['link'] ) . '">' . esc_html( $item['title'] ) . '</a></strong></td>';
			echo '<td><code>' . esc_html( $item['group'] ) . '</code></td>';
			echo '<td style="text-align: right">' . number_format( $item['clicks'] ) . '</td>';
			echo '</tr>';
		}

		echo '</tbody></table>';
        
		$report_url = admin_url( 'admin.php?page=haumenu-group-click-stats-page' );

		$view_full_report_text = __( 'View Full Report', 'hima-art-utility' );

		echo '<p style="margin-top: 20px; padding-top: 15px; border-top: 1px solid #eee; margin-bottom: 0; text-align:right;">';
		echo '<a href="' . esc_url( $report_url ) . '" class="haup-dashboard-widget-button">' . esc_html( $view_full_report_text ) . '</a>';
		echo '</p></div>';
        
	} else {
		$no_data_text = __( 'No click data recorded yet.', 'hima-art-utility' );
		echo '<p>' . esc_html( $no_data_text ) . '</p>';
	}
}

/*** 投稿一覧に「クリック表示」の有無を表示する列を追加 ***/
// 1. 列のヘッダーを追加
function haup_add_click_reveal_column( $columns ) {
	$column_title_text = __('Click Display','hima-art-utility');
	$columns['haup_click_reveal'] = esc_html( $column_title_text  ); // 列の見出し
	return $columns;
}
// フィルター名は投稿タイプごとに動的に対応させるため、後述のループで登録します

// 2. 列の中身（〇の表示）を判定
function haup_render_click_reveal_column( $column, $post_id ) {
	if ( $column === 'haup_click_reveal' ) {
		$post = get_post( $post_id );
		// ブロックスタイルのクラス名が含まれているかチェック
		if ( strpos( $post->post_content, 'is-style-haup-click-to-reveal' ) !== false ) {
			echo '<span style="color: #7f22b1; font-size: 1.2em; font-weight: bold;">〇</span>';
		} else {
			echo '<span style="color: #ccc;">ー</span>';
		}
	}
}

// 3. 各投稿タイプに対してフックを登録
function haup_render_click_reveal_columns_init(){
	// 対象の投稿タイプを取得（レポート表示用のカスタム投稿タイプ追加フックと同じフック名）
	$posttypes = array( 'post', 'page' );
	$post_types = apply_filters( 'haup_click_group_report_pt_filter', $posttypes );

	foreach ( (array) $post_types as $pt ) {
		// カラム追加のフィルター
		add_filter( "manage_{$pt}_posts_columns", 'haup_add_click_reveal_column' );
		// カラム描画のアクション
		add_action( "manage_{$pt}_posts_custom_column", 'haup_render_click_reveal_column', 10, 2 );
	}
}
add_action('admin_init','haup_render_click_reveal_columns_init');

/* カラム幅の調整（列が溢れないようにする） */
function haup_click_group_admin_list_style(){
?>
<style>
	th#haup_click_reveal {
	width: 10%;
	}
</style>
<?php
}
add_action('admin_head','haup_click_group_admin_list_style');

/*** クリック時に管理者へメール通知を送る（1日1回制限付き） ***/
function haup_send_click_notification( $post_id, $block_id ) {
	$today = date( 'Y-m-d' );
	$last_notify_key = '_haup_last_notify_date_' . $block_id;
	$last_notify_date = get_post_meta( $post_id, $last_notify_key, true );

	// 今日すでに通知済みなら何もしない
	if ( $last_notify_date === $today ) {
		return;
	}

	$post_title = get_the_title( $post_id );
	$admin_email = get_option( 'admin_email' );

	$site_title = get_bloginfo('name');
	$subject_text = __('[Notification] Content has been clicked','hima-art-utility');
	$subject = esc_html($subject_text).'['.$site_title.']';

	$first_text = __('The "View button" was clicked on the following page','hima-art-utility');
	$message = esc_html($first_text)."\n\n";

	$second_text = __('Page Title:','hima-art-utility');
	$message .= esc_html($second_text) .esc_html($post_title)."\n";

	$third_text = __('Page URL:','hima-art-utility');
	$message .= esc_html($third_text).esc_url(get_permalink( $post_id ))."\n";

	$fourth_message = __('Clicked Group:','hima-art-utility');
	$message .= esc_html( $fourth_message ).esc_html( $block_id )."\n\n";

	$fifth_message = __('This email will be sent to the group you specified in "Click to view" when each group is clicked for the first time on the day.','hima-art-utility');
	$sixth_message = __('If you do not need this email delivery, please disable "Email administrator when clicked" in the convenient functions of Hima Art Utility.','hima-art-utility');
	$message .= esc_html( $fifth_message ).esc_html( $sixth_message );

	// メール送信
	if ( wp_mail( $admin_email, $subject, $message ) ) {
		// 通知済みフラグを更新
		update_post_meta( $post_id, $last_notify_key, $today );
	}
}