<?php
/**
 * Plugin Name: AIちいちゃんパレット Pro
 * Description: WordPressブロックエディターに、AIちいちゃん専用の装飾パレットを追加します。
 * Version: 1.3.6
 * Requires at least: 6.0
 * Requires PHP: 7.4
 * Author: Takeログ AIちいちゃん研究所
 * Text Domain: ai-chiichan-palette-pro
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

define( 'AICHI_PALETTE_VERSION', '1.3.6' );
define( 'AICHI_PALETTE_URL', plugin_dir_url( __FILE__ ) );
define( 'AICHI_PALETTE_PATH', plugin_dir_path( __FILE__ ) );

require_once AICHI_PALETTE_PATH . 'includes/class-aichi-palette-coordinates.php';
AICHI_Palette_Coordinates::boot();

function aichi_palette_editor_assets() {
	$post_id = 0;
	if ( isset( $_GET['post'] ) ) {
		$post_id = absint( wp_unslash( $_GET['post'] ) );
	} elseif ( isset( $GLOBALS['post'] ) && $GLOBALS['post'] instanceof WP_Post ) {
		$post_id = (int) $GLOBALS['post']->ID;
	}
	wp_enqueue_style(
		'aichi-palette-style',
		AICHI_PALETTE_URL . 'assets/editor.css',
		array(),
		AICHI_PALETTE_VERSION
	);

	wp_enqueue_style(
		'aichi-palette-block-style',
		AICHI_PALETTE_URL . 'assets/front.css',
		array(),
		AICHI_PALETTE_VERSION
	);

	/*
	 * パレット本体を先にキューへ登録する。
	 * 追加コーデのCSS生成に問題があっても、右側タブまで消えない順序を保証する。
	 */
	wp_enqueue_script(
		'aichi-palette-app',
		AICHI_PALETTE_URL . 'assets/editor.js',
		array(
			'wp-api-fetch',
			'wp-blocks',
			'wp-block-editor',
			'wp-data',
			'wp-dom-ready',
			'wp-element',
			'wp-components',
			'wp-notices',
			'wp-rich-text',
		),
		AICHI_PALETTE_VERSION,
		true
	);

	$coordinate_css = '';
	try {
		$coordinate_css = AICHI_Palette_Coordinates::get_editor_css( $post_id );
	} catch ( Throwable $error ) {
		/* 追加コーデの表示失敗をパレット本体の起動失敗へ波及させない。 */
	}
	if ( $coordinate_css ) {
		wp_add_inline_style( 'aichi-palette-block-style', $coordinate_css );
	}

	$coordinates = array();
	try {
		$coordinates = AICHI_Palette_Coordinates::get_active_public_coordinates();
	} catch ( Throwable $error ) {
		/* タブは空の追加コーデ一覧で起動し、既存機能を利用可能に保つ。 */
	}

	wp_localize_script(
		'aichi-palette-app',
		'aichiPaletteConfig',
		array(
			'nonce'                => wp_create_nonce( 'wp_rest' ),
			'coordinates'          => $coordinates,
			'canManageCoordinates' => current_user_can( 'manage_options' ),
			'maxCoordinateBytes'   => AICHI_Palette_Coordinates::MAX_FILE_BYTES,
			'currentPostId'        => $post_id,
		)
	);
}
add_action( 'enqueue_block_editor_assets', 'aichi_palette_editor_assets' );

function aichi_palette_front_assets() {
	wp_enqueue_style(
		'aichi-palette-front',
		AICHI_PALETTE_URL . 'assets/front.css',
		array(),
		AICHI_PALETTE_VERSION
	);

	$coordinate_css = '';
	try {
		$coordinate_css = AICHI_Palette_Coordinates::get_front_css();
	} catch ( Throwable $error ) {
		/* 追加コーデのCSS生成失敗で公開記事そのものを止めない。 */
	}
	if ( $coordinate_css ) {
		wp_add_inline_style( 'aichi-palette-front', $coordinate_css );
	}
}
add_action( 'wp_enqueue_scripts', 'aichi_palette_front_assets' );

function aichi_palette_activation_notice() {
	set_transient( 'aichi_palette_notice', 1, 30 );
}
register_activation_hook( __FILE__, 'aichi_palette_activation_notice' );

function aichi_palette_admin_notice() {
	if ( ! current_user_can( 'activate_plugins' ) || ! get_transient( 'aichi_palette_notice' ) ) return;
	delete_transient( 'aichi_palette_notice' );

	echo '<div class="notice notice-success is-dismissible">';
	echo '<p><strong>' . esc_html__( 'AIちいちゃんパレット Pro Ver.1.3.6を有効化しました。', 'ai-chiichan-palette-pro' ) . '</strong><br>';
	echo esc_html__( '投稿・固定ページの編集画面右側に「AIちいちゃん」タブが表示されます。', 'ai-chiichan-palette-pro' ) . '</p>';
	echo '</div>';
}
add_action( 'admin_notices', 'aichi_palette_admin_notice' );
