/**
 * @mergeTarget
 * @module Src/Parameters
 */
import { LisioBooleanParameterNames } from "./lisio-boolean-parameter.js";
import { LisioNumericParameterNames } from "./lisio-numeric-parameter.js";
import { LisioStringParameterNames } from "./lisio-string-parameter.js";
/**
 * Type representing all parameters type
 */
type LisioParameterNames = LisioNumericParameterNames | LisioStringParameterNames | LisioBooleanParameterNames;
/**
 * Type representing a parsed parameter
 */
type LisioParameterParsed = {
    name: LisioParameterNames;
    value: unknown;
};
/**
 * ## How to create a new parameter ? Part 1
 *
 * First of all, you need to identify what is the type of your new parameter.\
 * To do so, you have to ask you : "In what form my parameter will be saved ?"\
 * Now depending on your answer you have multiple choices :
 *  * "My parameter will be saved as a number" : See {@link Src/Parameters/Numeric.LisioNumericParameter | LisioNumericParameter}
 *  * "My parameter will be saved as a string" : See {@link Src/Parameters/String.LisioStringParameter | LisioStringParameter}
 *  * "My parameter will be saved as a boolean" : See {@link Src/Parameters/Boolean.LisioBooleanParameter | LisioBooleanParameter}
 *  * You may have none of this answer, in this case you have to ask you : "Can I simplify my datas format to use string, number or boolean ?"
 *    * If "yes" all is well
 *    * If "no", create your new parameter type extend {@link LisioParameter | LisioParameter} and add this new class in type {@link LisioParameterNames | LisioParameterNames}
 *
 * ## How to modify a parameter ? Part 1
 *
 * First of all, you need to identify what is the type of your parameter.\
 * To do so, you have to ask you : "In what form my parameter is saved ?"\
 * Now depending on your answer you have multiple choices :
 *  * "My parameter is saved as a number" : See {@link Src/Parameters/Numeric.LisioNumericParameter | LisioNumericParameter}
 *  * "My parameter is saved as a string" : See {@link Src/Parameters/String.LisioStringParameter | LisioStringParameter}
 *  * "My parameter is saved as a boolean" : See {@link Src/Parameters/Boolean.LisioBooleanParameter | LisioBooleanParameter}
 *
 * ## How to delete a parameter ? Part 1
 *
 * First of all, you need to identify what is the type of your parameter.\
 * To do so, you have to ask you : "In what form my parameter is saved ?"\
 * Now depending on your answer you have multiple choices :
 *  * "My parameter is saved as a number" : See {@link Src/Parameters/Numeric.LisioNumericParameter | LisioNumericParameter}
 *  * "My parameter is saved as a string" : See {@link Src/Parameters/String.LisioStringParameter | LisioStringParameter}
 *  * "My parameter is saved as a boolean" : See {@link Src/Parameters/Boolean.LisioBooleanParameter | LisioBooleanParameter}
 *
 * ## Documentation
 *
 * Abstract class representing a parameter.\
 * It aims to centralize all the logic of a parameter.\
 * To execute his responsability this class does :
 *  * Saves name and value of a parameter
 *  * Formats parameter for message exchange
 */
declare abstract class LisioParameter {
    /**
     * Protected attribute to store name of parameter
     * @source
     */
    protected _name: LisioParameterNames;
    /**
     * Abstract protected attribute to store value of parameter
     * @source
     */
    protected abstract _value: unknown;
    /**
     * Abstract protected attribute to store default value of parameter
     * @source
     */
    protected abstract _defaultValue: unknown;
    /**
     * Getter for attribute {@link _name | _name}
     * @returns Returns _name attribute
     * @source
     */
    get name(): LisioParameterNames;
    /**
     * Abstract getter for attribute {@link _value | _value}
     * @returns Returns _value attribute
     * @source
     */
    abstract get value(): unknown;
    /**
     * Abstract getter for attribute {@link _defaultValue | _defaultValue}
     * @returns Returns _defaultValue attribute
     * @source
     */
    abstract get defaultValue(): unknown;
    /**
     * Public method to parse user
     * @returns Returns parsed parameter
     * @source
     */
    formatForSaving(): LisioParameterParsed;
    /**
     * Constructor of class {@link LisioParameterNames | LisioParameterNames}
     * @param {LisioParameterNamesNames} name - Parameter name
     * @source
     */
    constructor(name: LisioParameterNames);
}
export { LisioParameter };
export type { LisioParameterNames, LisioParameterParsed };
