<?php
/**
 * BookiFlex Core
 *
 * @package    BookiFlex
 * @subpackage Core
 * @author     BookiFlex
 * @copyright  Copyright (c) 2025 BookiFlex
 * @license    GPL-2.0-or-later
 *
 * @link       https://bookiflex.com
 */

declare(strict_types=1);

namespace BookiFlex\Core\Contract;

use BookiFlex\Core\Admin\AbstractAssetsManager;
use BookiFlex\Core\Container\ServiceContainer;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventDispatcher;

defined( 'ABSPATH' ) || exit;

/**
 * Main plugin interface
 */
interface PluginInterface extends HooksInterface
{
    public function init(): void;
    public function getEdition(): string;
	public function isFreeEdition(): bool;
    public function getVersion(): string;
    public function getPluginDir(): string;
    public function getPluginUrl(): string;

    public function getContainer(): ServiceContainer;
    public function getEventDispatcher(): EventDispatcher;
    public function getLogger(): ?LoggerInterface;
    public function getAssetsManager(): AbstractAssetsManager;

    /**
     * Add configuration to plugin
     *
     * @param array<string, mixed> $config Configuration array
     * @return void
     */
    public function addConfig(array $config): void;
}
