<?php

namespace Pixalia\ImageAssistant\Admin\View;

use Pixalia\ImageAssistant\Base\Const\PixaliaConst;
use Pixalia\ImageAssistant\Repository\OptionRepository;

use function __ as __;

class Notice {

	/**
	 * 一括チェックを促す警告を管理画面に表示します。
	 * 'admin_notices' フックで呼び出されます。
	 */
	public function show_bulk_check_notice(): void {
		// 1. 現在の画面が投稿一覧か設定ページかを確認
		$screen = get_current_screen();
		if ( ! $screen ) {
			return;
		}

		// チェック対象の投稿タイプの投稿一覧画面
		/** @var array $allowedPostTypes */
		$allowedPostTypes = get_option( PixaliaConst::OPTION_POST_TYPES, [ 'post' ] );
		$allowedEditScreens = array_map(fn($type) => 'edit-' . $type, $allowedPostTypes);

		// チェック対象のプラグイン独自ページ
		$allowedPluginScreens = [
			'toplevel_page_' . PixaliaConst::MENU_SLUG_EYECATCH_CHECK,
			PixaliaConst::MENU_SLUG_EYECATCH_CHECK . '_page_' . PixaliaConst::MENU_SLUG_SETTINGS,
		];

		//投稿一覧画面か、プラグインの画面（アイキャッチチェック画面）の場合は警告表示の対象
		$allowedScreens = array_merge($allowedEditScreens, $allowedPluginScreens);
		if ( ! in_array( $screen->id, $allowedScreens, true ) ) {
			return;
		}

		// 2. バージョンを比較
		$optionRepository = new OptionRepository(); // ★ リポジトリをインスタンス化
		$savedVersion = $optionRepository->getLastCheckVersion(); // ★ メソッド経由で取得

		if ( $savedVersion < PixaliaConst::LOGIC_VERSION ) {
			// 3. 警告メッセージを表示
			//最終チェックバージョンが0の場合は一度もチェックされていないことを示すメッセージにする
			$message = ( $savedVersion === 0 )
				? __( 'Pixalia Image Assistant: Existing posts have not been checked for image status yet.', 'pixalia-image-assistant' )
				: __( 'Pixalia Image Assistant: The check logic has been updated. We recommend re-checking your existing posts.', 'pixalia-image-assistant' );

			$settingsUrl = admin_url( 'admin.php?page=' . PixaliaConst::MENU_SLUG_SETTINGS );

			printf(
				'<div class="notice notice-warning is-dismissible"><p>%s <a href="%s" class="button button-primary">%s</a></p></div>',
				esc_html( $message ),
				esc_url( $settingsUrl ),
				esc_html( __( 'Go to Settings', 'pixalia-image-assistant' ) )
			);
		}
	}
}