<?php
/**
 * AG WP Plugin Install Manager — ヘルパー関数。
 *
 * ライブラリを簡潔に使うためのグローバル関数群。
 * テーマ・プラグイン側からシンプルに呼び出せる。
 *
 * 同一サイトに複数のインスタンスが存在する場合は、
 * $menu_slug に対象インスタンスの管理メニュースラッグを指定する。
 *
 * @package AG_WP_Plugin_Install_Manager
 */

// WordPress 外からの直接アクセスを禁止。
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

if ( ! function_exists( 'ag_wpim' ) ) {

	/**
	 * AG_WP_Plugin_Install_Manager のインスタンスを返す。
	 *
	 * 最も基本的なヘルパー。他のヘルパー関数はこれを経由する。
	 *
	 * @since 1.0.0
	 *
	 * @param string $menu_slug 取得するインスタンスの管理メニュースラッグ。
	 * @return AG_WP_Plugin_Install_Manager
	 */
	function ag_wpim( $menu_slug = 'ag-wpim' ) {
		return AG_WP_Plugin_Install_Manager::get_instance( $menu_slug );
	}
}

if ( ! function_exists( 'ag_wpim_is_plugin_active' ) ) {

	/**
	 * 指定プラグインが有効化されているかどうかを返す。
	 *
	 * @since 1.0.0
	 *
	 * @param string $slug      プラグインスラッグ。
	 * @param string $menu_slug 対象インスタンスの管理メニュースラッグ。
	 * @return bool
	 */
	function ag_wpim_is_plugin_active( $slug, $menu_slug = 'ag-wpim' ) {
		return ag_wpim( $menu_slug )->is_plugin_active( $slug );
	}
}

if ( ! function_exists( 'ag_wpim_is_plugin_installed' ) ) {

	/**
	 * 指定プラグインがインストール済みかどうかを返す。
	 *
	 * @since 1.0.0
	 *
	 * @param string $slug      プラグインスラッグ。
	 * @param string $menu_slug 対象インスタンスの管理メニュースラッグ。
	 * @return bool
	 */
	function ag_wpim_is_plugin_installed( $slug, $menu_slug = 'ag-wpim' ) {
		return ag_wpim( $menu_slug )->is_plugin_installed( $slug );
	}
}

if ( ! function_exists( 'ag_wpim_get_plugin_status' ) ) {

	/**
	 * 指定プラグインの状態を返す。
	 *
	 * @since 1.0.0
	 *
	 * @param string $slug      プラグインスラッグ。
	 * @param string $menu_slug 対象インスタンスの管理メニュースラッグ。
	 * @return string 'active' | 'inactive' | 'missing'
	 */
	function ag_wpim_get_plugin_status( $slug, $menu_slug = 'ag-wpim' ) {
		return ag_wpim( $menu_slug )->get_plugin_status( $slug );
	}
}

if ( ! function_exists( 'ag_wpim_has_missing_plugins' ) ) {

	/**
	 * 未インストールのプラグインが1件以上あるかどうかを返す。
	 *
	 * 管理画面の出し分けや条件分岐に使う。
	 *
	 * @since 1.0.0
	 *
	 * @param string $menu_slug 対象インスタンスの管理メニュースラッグ。
	 * @return bool
	 */
	function ag_wpim_has_missing_plugins( $menu_slug = 'ag-wpim' ) {
		return count( ag_wpim( $menu_slug )->get_plugins_by_status( 'missing' ) ) > 0;
	}
}

if ( ! function_exists( 'ag_wpim_has_inactive_plugins' ) ) {

	/**
	 * 未有効化のプラグインが1件以上あるかどうかを返す。
	 *
	 * @since 1.0.0
	 *
	 * @param string $menu_slug 対象インスタンスの管理メニュースラッグ。
	 * @return bool
	 */
	function ag_wpim_has_inactive_plugins( $menu_slug = 'ag-wpim' ) {
		return count( ag_wpim( $menu_slug )->get_plugins_by_status( 'inactive' ) ) > 0;
	}
}

if ( ! function_exists( 'ag_wpim_has_action_required' ) ) {

	/**
	 * 未インストールまたは未有効化のプラグインが1件以上あるかどうかを返す。
	 *
	 * 通知表示の条件チェックなどに使う。
	 *
	 * @since 1.0.0
	 *
	 * @param string $menu_slug 対象インスタンスの管理メニュースラッグ。
	 * @return bool
	 */
	function ag_wpim_has_action_required( $menu_slug = 'ag-wpim' ) {
		return ag_wpim_has_missing_plugins( $menu_slug ) || ag_wpim_has_inactive_plugins( $menu_slug );
	}
}

if ( ! function_exists( 'ag_wpim_get_admin_url' ) ) {

	/**
	 * ライブラリの管理ページURLを返す。
	 *
	 * parent_slug（themes.php / plugins.php）を使って正しいURLを生成する。
	 *
	 * @since 1.0.0
	 *
	 * @param string $menu_slug 対象インスタンスの管理メニュースラッグ。
	 * @return string
	 */
	function ag_wpim_get_admin_url( $menu_slug = 'ag-wpim' ) {
		$config = ag_wpim( $menu_slug )->get_config();
		return admin_url( $config['parent_slug'] . '?page=' . $config['menu_slug'] );
	}
}
