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

/***** テーマオプションなどで設定した値をカスタムCSS変数として出力する *****/
/*** 共通の変換値を各処理に渡す（同一文字列の指定によるミスを減らすため） ***/
/* haup_custom_css_preset_values_filterでた場所からでも設定を追加できるようにする */
function haup_get_all_custom_preset_values() {
	// 最初の（ベースとなる）設定値を定義
	$base_settings = array(
		// ベースのパターンを定義した関数を呼び出す、またはここに直接定義
		// 追加の関数で必要に応じてパターンを追加するため、ここではすべてコメントアウトして無効にしている
		'color' => array(
			//'system-red'   => '#ff0000',
			//'hidden-bg'    => '#333333',
			//'alert-yellow' => '#ffd700',
		),
		'image' => array(
			//'hero-bg-url'    => 'url("https://example.com/wp-content/uploads/hero-bg.jpg")',
			//'pattern-bg-url' => 'url("https://example.com/wp-content/uploads/pattern-bg.png")',
		),
		'layout' => array(
			//'max-width-content' => '1200px',
			//'spacing-unit'      => '1.5rem',
		)
	);

	$all_settings = apply_filters( 'haup_custom_css_preset_values_filter', $base_settings );

	return $all_settings;
}

/*** theme.json を持つテーマ向け ***/
function haup_custom_preset_value_for_blocktheme( $theme_json ) {
	//theme.jsonのデータを取得
	$data = $theme_json->get_data();

	// プリセット値の定義（外部の関数から引用）
	$custom_settings = haup_get_all_custom_preset_values();

	// 既存の custom セクションと結合
	if ( ! isset( $data['settings']['custom'] ) ) {
		$data['settings']['custom'] = array();
	}
    
	// PHPで定義した新しいカスタム設定を結合/上書き
	$data['settings']['custom'] = array_merge(
		$data['settings']['custom'],
		$custom_settings
	);

	// 変更後の新しいオブジェクトを返す
	return new WP_Theme_JSON_Data( $data ); 
}

/*** theme.json が存在しないクラシックテーマ向け ***/
function haup_custom_preset_value_for_classictheme() {

	// プリセット値の定義（外部の関数から引用）
	$custom_settings = haup_get_all_custom_preset_values();

	// 階層構造をフラットなCSS変数定義の文字列に変換
	$css_output = ':root {';
	$css_output .= haup_prefix_for_custom_preset_value( $custom_settings );
	$css_output .= '}';

	// テーマのメインスタイルシートにインラインで追記
	// 有効化しているテーマでフロントエンドに出力されているCSSのハンドル名を指定
	$style_handle = 'haup-front-and-blocks-style'; 
    
	// スタイルシートが登録されているかチェックし、追記を実行
	if ( wp_style_is( $style_handle, 'enqueued' ) || wp_style_is( $style_handle, 'done' ) ) {
		wp_add_inline_style( $style_handle, $css_output );
	} else {
		//ハンドル名が存在しない場合の措置
		//フロントエンドでは「wp-block-library」を管理画面では「wp-codemirror」をターゲットにする
		// ※このハンドル名はWordPressサイトすべてで出力されていない点に注意
		wp_add_inline_style( 'wp-block-library', $css_output );
	}
}

/*** カスタム設定をCSS変数として出力、（管理画面向け) ***/
function haup_custom_preset_value_for_admin() {

	// プリセット値の定義（外部の関数から引用）
	$custom_settings = haup_get_all_custom_preset_values();

	// 階層構造をフラットなCSS変数定義の文字列に変換
	$css_output = ':root {';
	$css_output .= haup_prefix_for_custom_preset_value( $custom_settings );
	$css_output .= '}';

	// テーマのメインスタイルシートにインラインで追記
	// 有効化しているテーマで管理画面に出力されているCSSのハンドル名を指定
	$style_handle = 'haup-only-admin-style'; 
    
	// スタイルシートが登録されているかチェックし、追記を実行
	if ( wp_style_is( $style_handle, 'enqueued' ) || wp_style_is( $style_handle, 'done' ) ) {
		wp_add_inline_style( $style_handle, $css_output );
	} else {
		//ハンドル名が存在しない場合の措置
		//「wp-codemirror」をターゲットにする
		// ※このハンドル名はWordPressサイトすべてで出力されていない点に注意
		wp_add_inline_style( 'wp-codemirror', $css_output );
	}
}

/*** カスタム設定をCSS変数として出力、（管理画面向け) ***/
function haup_custom_preset_value_for_login_screen() {

	// プリセット値の定義（外部の関数から引用）
	$custom_settings = haup_get_all_custom_preset_values();

	// 階層構造をフラットなCSS変数定義の文字列に変換
	$css_output = ':root {';
	$css_output .= haup_prefix_for_custom_preset_value( $custom_settings );
	$css_output .= '}';

	// テーマのメインスタイルシートにインラインで追記
	// 有効化しているテーマで管理画面に出力されているCSSのハンドル名を指定
	$style_handle = 'haup-login-style'; 
    
	// スタイルシートが登録されているかチェックし、追記を実行
	if ( wp_style_is( $style_handle, 'enqueued' ) || wp_style_is( $style_handle, 'done' ) ) {
		wp_add_inline_style( $style_handle, $css_output );
	} else {
		//ハンドル名が存在しない場合の措置
		//「wp-codemirror」をターゲットにする
		// ※このハンドル名はWordPressサイトすべてで出力されていない点に注意
		wp_add_inline_style( 'wp-codemirror', $css_output );
	}
}

/* インライン出力するプリセット値に「--wp--custom」という接頭辞を付ける */
function haup_prefix_for_custom_preset_value( $array, $prefix = '--wp--custom' ) {
	$css = '';
    
	foreach ( $array as $key => $value ) {
		$key = sanitize_key( $key ); // キーを安全な文字列に変換
		$var_name = "{$prefix}--{$key}";

		if ( is_array( $value ) ) {
			// 値が配列の場合、再帰的に処理 (階層が続く)
			$css .= haup_prefix_for_custom_preset_value( $value, $var_name );
		} else {
			// 値が文字列の場合、変数定義を生成 (最終階層)
			$css .= "{$var_name}: {$value};";
		}
	}

	return $css;
}

/*** 管理画面への出力と、theme.jsonの有無でフロントへの出力を切り替え ***/
function haup_add_custom_preset_value_theme_type() {
 	// theme.json の存在をチェック
	// ブロックテーマかどうかを判定する
	$is_block_theme = function_exists( 'wp_is_block_theme' ) && wp_is_block_theme();

	if ( $is_block_theme ) {
		// ブロックテーマの場合
		add_filter( 'wp_theme_json_data_default', 'haup_custom_preset_value_for_blocktheme' );
	} else {
		// クラシックテーマの場合
		add_action( 'wp_enqueue_scripts', 'haup_custom_preset_value_for_classictheme' );
	}
	
	//theme.jsonの有無に関わらず管理画面へはプリセット値を出力
	if(is_admin()){
		add_action( 'admin_enqueue_scripts', 'haup_custom_preset_value_for_admin' );
	}

	//theme.jsonの有無に関わらずログイン画面へプリセット値を出力
	add_action( 'login_enqueue_scripts', 'haup_custom_preset_value_for_login_screen' );
}
add_action( 'after_setup_theme', 'haup_add_custom_preset_value_theme_type' );



/*** 追加の設定値を定義する関数 ***/
/* 共通するキーがある場合は後から指定する値が適用されるので注意 */
/*
 function haup_add_css_custom_properties_for_bd_date( $settings ) {
	$new_settings = array(
		'color' => array(
			'brand-blue' => '#0056b3',
		),
		'layout' => array(
			'header-height' => '80px',
		)
	);

	// 既存の設定と新しい設定でキーが重複した場合、後から追加されたものが優先されます。
	return array_merge_recursive( $settings, $new_settings );
}
*/
//add_filter( 'haup_custom_css_preset_values_filter', 'haup_add_css_custom_properties_for_bd_date' );