/**
 * @mergeTarget
 * @module Src/Categories
 */
import { LisioParameterNames } from "../parameter/lisio-parameter.js";
import { LisioProfileNames } from "../profile/lisio-profile.js";
import { LisioCategory, LisioCategoryNames } from "./lisio-category.js";
/**
 * Type representing a lisio category builder
 */
type LisioCategoryBuilder = (subCategoriesToHide: LisioCategoryNames[], profilesToHide: LisioProfileNames[], parametersToHide: LisioParameterNames[]) => LisioCategory;
/**
 * ## How to create a new category ? Part 2
 *
 * To create a new category is very easy, if you don't create a new category name go to {@link Src/Categories.LisioCategoryNames | LisioCategoryNames}.\
 * Next go create a new builder for your category, it only consists at choose which parameters, profiles and categories your category will include. You can take exemple on other builders.\
 * When it's done the final step is to add your new builder in {@link LisioCategoryFactory._builders | LisioCategoryFactory._builders}
 *
 * ## How to modify a category ? Part 2
 *
 * To rename a category is very easy, if you want to rename your category and you don't choose a new category name go to {@link Src/Categories.LisioCategoryNames | LisioCategoryNames}.\
 * Next change all old category name by your new category name.\
 *
 * If you want to modify parameters, profiles or subcategories used in category, go to category builder and modify it as you desire.
 *
 * ## How to delete a category ? Part 2
 *
 * To delete a category is very easy, if you don't delete category name go to {@link Src/Categories.LisioCategoryNames | LisioCategoryNames}.\
 * Next delete your category builder.\
 * When it's done the final step is to remove your old builder from {@link LisioCategoryFactory._builders | LisioCategoryFactory._builders}
 *
 * ## Documentation
 *
 * Class representing a category factory.\
 * It aims to centralize all instanciation of category.\
 * To execute his responsability this class does :
 *  * Build a category with right corresponding parameters, categorys and subcategories
 */
declare class LisioCategoryFactory {
    /**
     * Private attribute to store all category builders
     * @source
     */
    private _builders;
    /**
     * @static
     * Private attribute to store instance of {@link LisioCategoryFactory | LisioCategoryFactory}
     * @source
     */
    private static _current;
    /**
     * @static
     * Getter for attribute {@link _current | _current}
     * @returns Returns _current attribute
     * @source
     */
    static get current(): LisioCategoryFactory;
    /**
     * Private method to build light ecological category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns light ecological category
     * @source
     */
    private lightEcologicalBuilder;
    /**
     * Private method to build ecological category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns ecological category
     * @source
     */
    private ecologicalBuilder;
    /**
     * Private method to build rural category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns rural category
     * @source
     */
    private ruralBuilder;
    /**
     * Private method to build accessibility category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns accessibility category
     * @source
     */
    private accessibilityBuilder;
    /**
     * Private method to build comfort category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns comfort category
     * @source
     */
    private comfortBuilder;
    /**
     * Private method to build speech synthesis category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns speech synthesis category
     * @source
     */
    private speechSynthesisBuilder;
    /**
     * Private method to build google translation category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns google translation category
     * @source
     */
    private googleTranslationBuilder;
    /**
     * Private method to build deepl translation category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns deepl translation category
     * @source
     */
    private deeplTranslationBuilder;
    /**
     * Private method to build dyslexia category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns dyslexia category
     * @source
     */
    private dyslexiaBuilder;
    /**
     * Private method to build daltonism category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns daltonism category
     * @source
     */
    private daltonismBuilder;
    /**
     * Private method to build settings category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Returns settings category
     * @source
     */
    private settingsBuilder;
    /**
     * Public method to build a desired category
     * @param {LisiocategoryNames} categoryName - Name of desired category
     * @param {LisioCategoryNames[]} subCategoriesToHide - Sub-categories to hide
     * @param {LisioProfileNames[]} profilesToHide - Profiles to hide
     * @param {LisioParameterNames[]} parametersToHide - Parameters to hide
     * @returns Retuns a lisio category
     * @throws If category doesn't exist.\
     * See {@link Src/Utils.LisioProfilErrorCodes.CATEGORY_NOT_FOUND | LisioProfilErrorCodes.CATEGORY_NOT_FOUND}
     * @source
     */
    buildLisioCategory(categoryName: LisioCategoryNames, subCategoriesToHide: LisioCategoryNames[], profilesToHide: LisioProfileNames[], parametersToHide: LisioParameterNames[]): LisioCategory;
    /**
     * Constructor of class {@link LisioCategoryFactory | LisioCategoryFactory}
     * @throws If singleton already initialize.\
     * See {@link https://env-preprod-docs.lisio.fr/lisio-engine/enums/Src_Core.CoreErrorCodes.html#SINGLETON_NOT_UNIQUE | CoreErrorCodes.SINGLETON_NOT_UNIQUE}
     * @source
     */
    constructor();
}
export { LisioCategoryFactory };
export type { LisioCategoryBuilder };
