<?php

namespace PluginsNameSpaces;

use PluginsNameSpaces\Framework\Foundation\App as BaseApp;
use PluginsNameSpaces\Hooks\Handlers\AdminMenuHandlers;
use PluginsNameSpaces\Hooks\Handlers\AssetHandler;
use PluginsNameSpaces\Hooks\Handlers\RestRouteHandler;
use PluginsNameSpaces\Hooks\CLI\Commands;

/**
 * The plugin's App facade.
 *
 * Extends the framework facade (App::config(), App::make(), App::db())
 * and wires the runtime handlers when booted.
 */
class App extends BaseApp
{
    /**
     * Boot the plugin's runtime handlers.
     *
     * @return void
     */
    public function boot()
    {
        $this->loadTextDomain();

        static::make(AdminMenuHandlers::class)->register();
        static::make(AssetHandler::class)->register();
        static::make(RestRouteHandler::class)->register();

        // Load hook wiring (actions + filters).
        require __CONST_PREFIX___PATH . 'app/Hooks/actions.php';
        require __CONST_PREFIX___PATH . 'app/Hooks/filters.php';

        // Register WP-CLI commands when running under WP-CLI.
        if (defined('WP_CLI') && WP_CLI) {
            \WP_CLI::add_command(static::config('app.cli_command'), Commands::class);
        }
    }

    /**
     * Load the plugin text domain for translations.
     *
     * @return void
     */
    protected function loadTextDomain()
    {
        load_plugin_textdomain(
            static::config('app.text_domain'),
            false,
            dirname(plugin_basename(__CONST_PREFIX___FILE)) . static::config('app.domain_path')
        );
    }
}
