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

/********** 複数のスタイルシートをマージして出力 **********/
/***** 管理画面のみ *****/
// 結合後のキャッシュファイル名
if ( ! defined( 'HAUP_PLUGIN_CACHE_FILE_ADMIN' ) ) {
	define( 'HAUP_PLUGIN_CACHE_FILE_ADMIN', 'combined-style-admin.css' );
}

// 結合したいソースCSSファイルのリスト
function haup_plugin_get_source_files_admin() {
	return array(
		HAUP_PLUGIN_PATH . 'init-style/css/admin-style.css',
		//HAUP_PLUGIN_PATH . 'style/sub-style.css',
	);
}

/*** キャッシュファイルのパスを返し、必要に応じてCSSを結合・圧縮して保存する ***/
 function haup_plugin_cache_combined_css_admin() {
	$combined_css_path = HAUP_PLUGIN_CACHE_DIR . HAUP_PLUGIN_CACHE_FILE_ADMIN;

	// --- 1. キャッシュディレクトリの確認と作成 ---
	if ( ! is_dir( HAUP_PLUGIN_CACHE_DIR ) ) {
		// WordPressの関数で安全にディレクトリを作成
		wp_mkdir_p( HAUP_PLUGIN_CACHE_DIR );
	}

	// --- 2. 再生成が必要かどうかの判断 ---
	$cache_time = file_exists( $combined_css_path ) ? filemtime( $combined_css_path ) : 0;
	$source_files = haup_plugin_get_source_files_admin();
	$needs_regeneration = ( $cache_time === 0 ); // キャッシュファイルが存在しない場合は再生成

	if ( ! $needs_regeneration ) {
		// ソースファイルのうち、最も新しい更新日時を取得
		$latest_source_time = 0;
		foreach ( $source_files as $file_path ) {
			if ( file_exists( $file_path ) ) {
				$latest_source_time = max( $latest_source_time, filemtime( $file_path ) );
			}
		}
        
		// ソースファイルのいずれかがキャッシュファイルより新しい場合、再生成フラグを立てる
		if ( $latest_source_time > $cache_time ) {
			$needs_regeneration = true;
		}
	}
    
	// --- 3. 結合・圧縮・保存の実行 ---
	if ( $needs_regeneration ) {
		// CSSを結合
		$combined_css_content = '';
		foreach ( $source_files as $file_path ) {
			if ( file_exists( $file_path ) ) {
				// 絶対パスの問題に対応するため、元のパスもコメントとして残す
				$combined_css_content .= "\n/* Source: " . basename( $file_path ) . " */\n"; 
				$combined_css_content .= file_get_contents( $file_path );
			}
		}

		// 圧縮（Minification）: コメント、改行、スペースを削除
		$minified_content = $combined_css_content;
		$minified_content = preg_replace( '/\/\*.*?\*\//s', '', $minified_content ); // コメント削除
		$minified_content = preg_replace( '/\s+/', ' ', $minified_content ); // 連続するスペースを一つに
		$minified_content = str_replace( array( ';}', ': ' ), array( '}', ':' ), $minified_content ); // 冗長な空白とセミコロンの削除

		// ファイルに書き出し
		//file_put_contents( $combined_css_path, trim( $minified_content ) );
		global $wp_filesystem;
        
		// WP_Filesystem APIの初期化
		if ( empty( $wp_filesystem ) ) {
			require_once( ABSPATH . 'wp-admin/includes/file.php' );
			// 認証情報なしの直接ファイルアクセスを試みる (最も一般的で速い方法)
			$initialized = WP_Filesystem( false, false, true );
            
			if ( ! $initialized ) {
				// 初期化失敗時の代替手段 (ログ出力など)
				// 致命的なエラーではないため、そのまま終了
				return $combined_css_path;
			}
		}
        
		// WP_Filesystem::put_contents() を使用してファイルに書き出し
		// FS_CHMOD_FILE で適切なパーミッションを設定
		$result = $wp_filesystem->put_contents(
			$combined_css_path,
			trim( $minified_content ),
			FS_CHMOD_FILE 
		);
        
		 if ( ! $result ) {
			// 書き込み失敗時のエラー処理をここに記述
			// error_log( 'Failed to write combined CSS file using WP_Filesystem.' );
		}
	}

	// キャッシュファイルが生成されたかどうかに関わらず、最終的なパスを返す
	return $combined_css_path;
}
function haup_plugin_enqueue_cached_css_admin() {
	$cached_file_path = haup_plugin_cache_combined_css_admin(); // ここで再生成ロジックが実行される

	// キャッシュファイルのURLを生成
	$cache_dir_url = content_url( '/uploads/haup-plugin-style-cache/' );
	$cached_file_url = $cache_dir_url . HAUP_PLUGIN_CACHE_FILE_ADMIN;
    
	// バージョンを最終更新日時に設定
	$version = file_exists( $cached_file_path ) ? filemtime( $cached_file_path ) : '1.0';

	wp_enqueue_style( 'haup-only-admin-style', $cached_file_url, array('wp-codemirror'), $version );
}
add_action( 'admin_enqueue_scripts', 'haup_plugin_enqueue_cached_css_admin' );