<?php
    /**
     * Class: Modules
     * Contains various functions, acts as the backbone for all modules.
     */
    class Modules {
        # Array: $instances
        # Holds all Module instantiations.
        public static $instances = array();

        # Boolean: $cancelled
        # Is the module's execution cancelled?
        public $cancelled = false;

        # String: $safename
        # The module's non-camelized name.
        public $safename = "";

        /**
         * Function: setPriority
         * Sets the priority of an action for the module this function is called from.
         *
         * Parameters:
         *     $name - Name of the trigger to respond to.
         *     $priority - Priority of the response.
         */
        protected function setPriority($name, $priority): void {
            Trigger::current()->priorities[$name][] = array(
                "priority" => $priority,
                "function" => array($this, $name)
            );
        }

        /**
         * Function: addAlias
         * Allows a module to respond to a trigger with multiple functions and custom priorities.
         *
         * Parameters:
         *     $name - Name of the trigger to respond to.
         *     $function - Name of the class function to respond with.
         *     $priority - Priority of the response.
         */
        protected function addAlias($name, $function, $priority = 10): void {
            Trigger::current()->priorities[$name][] = array(
                "priority" => $priority,
                "function" => array($this, $function)
            );
        }
    }