<?php

namespace Pixalia\ImageAssistant\Admin\View;

use Pixalia\ImageAssistant\Base\Const\PixaliaConst;
use Pixalia\ImageAssistant\Repository\OptionRepository;
use WP_Post;
use function __ as __;

/**
 * PostEdit Class
 *
 * 投稿編集画面の表示をカスタマイズします（メタボックスの追加など）。
 */
class PostEdit {
	/**
	 * メタボックスを投稿タイプの編集画面に追加します。
	 *
	 * @param string $postType 現在の投稿タイプ
	 */
	public function add( string $postType ) {
		/** @var array $allowedPostTypes */
		$allowedPostTypes = get_option( PixaliaConst::OPTION_POST_TYPES, [ 'post' ] );
		if ( ! in_array( $postType, $allowedPostTypes, true ) ) {
			return;
		}

		add_meta_box(
			'pixalia_image_assistant_metabox',
			__( 'Pixalia Image Assistant', 'pixalia-image-assistant' ),
			[ $this, 'render_react_wrapper' ],
			$postType,
			'side',
			'high'
		);
	}

	/**
	 * Reactアプリを描画するための「器」となるdiv要素を出力します。
	 *
	 * @param WP_Post $post 現在の投稿オブジェクト
	 */
	public function render_react_wrapper( WP_Post $post ) {
		echo '<div class="pixalia-react-root" data-component="PostEdit"></div>';
	}

	/**
	 * メタボックスのデータを保存します。（AJAX処理がメインのため、ここは基本空）
	 *
	 * @param int $postId 保存された投稿のID
	 */
	public function save( int $postId ) {
		// ユーザー入力の保存はReact -> AJAX経由で行うため、
		// このフックでの処理は基本的に不要です。
		// ただし、セキュリティチェックの雛形は残しておくと安全です。
		if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
			return;
		}
		if ( ! current_user_can( 'edit_post', $postId ) ) {
			return;
		}
	}
}
