
/**
 * Rules manager class, контролен клас за управление на игрови правила
 */
class RulesManager{
    name = 'rule';

    /**
     * Class initializer, инициализация на плъгин
     * @param {App} app Class initializer, основна апликация
     */
    init(app){
        const {db} = app;

        /**
         * Creates a new rule, създаване на ново правило
         * @param {Context} ctx Request context, контекст на заявката
         * @param {Rule} data the rule, данни за правилото
         */
        this.create = async function(ctx, data){

        }

        /**
         * Reads rule by ID, извличане на игрово правило от базата от данни по подаден идентификатор
         * @param {Number} id rule ID, идентификатор на правило
         * @returns {Rule}
         */
        this.read = async function(id){

        }

        /**
         * Updates rule, обновяване на игрово правило
         * @param {Context} ctx Request context, контекст на заявката
         * @param {Rule} data the rule, данни за правилото
         */
        this.update = async function(ctx, data){

        }

        /**
         * Removes rule by ID, изтриване на игрово правило по подаден идентификатор
         * @param {Number} id rule ID, идентификатор на правилото
         */
        this.remove = async function(id){

        }

        /**
         * Returns a set of rules by given criteria, търсене в игровите правила по зададени критерии
         * @param {Query} query criteria, критерии, заявка към базата от данни
         * @returns {Rule[]}
         */
        this.list = async function(query){

        }
        
    }

    /**
     * Class starter
     * @param {App} app The application, основна апликация
     */
    async start(app){

    }
}

/**
 * Rule entity, игрово правило - елемент
 */
class Rule {
    /**
     * Rule name, име на правилото
     * @type string
     */
    name = null;

    /**
     * Rule definition, дефиниция на правилото
     * @type Object
     */
    name = null;

}

export { RulesManager }