<?php

namespace PloverCRM\Core;

/**
 * Interface ModuleInterface
 * 
 * All modules must implement this interface to be loaded by the ModuleManager
 */
interface ModuleInterface
{
    /**
     * Register module services, hooks, and dependencies
     * Called during WordPress 'plugins_loaded' action
     * 
     * @return void
     */
    public function register(): void;

    /**
     * Boot the module after all modules are registered
     * Called after all modules have been registered
     * 
     * @return void
     */
    public function boot(): void;

    /**
     * Check if this module should be loaded
     * 
     * @return bool
     */
    public function isEnabled(): bool;

    /**
     * Get module identifier
     * 
     * @return string
     */
    public function getId(): string;

    /**
     * Get module dependencies (IDs of other modules this module requires)
     * 
     * @return array
     */
    public function getDependencies(): array;

    /**
     * Get module metadata
     * 
     * @return array Array with keys: name, description, version, author, icon
     */
    public function getMetadata(): array;
}
