import { Nub } from "../internal_modules";
import { EspeceParams } from "../internal_modules";
import { Observer } from "../internal_modules";
import { FishSpecies } from "../internal_modules";
import { Result } from "../internal_modules";
import { FishPass } from "../internal_modules";
import { StructureJetType } from "../internal_modules";
import { MacroRugo } from "../internal_modules";
import { ResultElement } from "../internal_modules";
import { LoiDebit } from "../internal_modules";
import { ParallelStructure } from "../internal_modules";
import { Cloisons } from "../internal_modules";
import { DivingJetSupport } from "../internal_modules";
/**
 * Settings for a given fish species (or custom settings), to verify crossing capacities on fish passes.
 * Meant to be used with Verificateur.
 */
export declare class Espece extends Nub implements Observer {
    /** Multidimension table of parameters values presets, by pass type and species */
    protected presets: any;
    /**
     * The Pab, ParSimulation, or MacroRugo[Compound] to check (Par are not supposed to be checked).
     * Passed by the Verificateur
     */
    protected _passToCheck: FishPass;
    /**
     * For variating passes, index of the result to examine.
     * Passed by the Verificateur
     */
    indexToCheck: number;
    constructor(prms: EspeceParams, dbg?: boolean);
    get prms(): EspeceParams;
    get species(): FishSpecies;
    /** Changing the fish species will load adequate predefined values */
    set species(s: FishSpecies);
    set passToCheck(p: FishPass);
    get divingJetSupported(): DivingJetSupport;
    set divingJetSupported(i: DivingJetSupport);
    /**
     * Check that all given criteria are defined before controlling their values
     * @param symbols list of symbols of criteria that have to be defined
     * @return undefined if all criteria are present, a Result with appropriate error
     *      log messages otherwise
     */
    protected checkCriteriaPresence(symbols: string[]): Result;
    /** Returns 1 if the fish can go through the pass, 0 if it cannot */
    Equation(): Result;
    update(sender: any, data: any): void;
    /**
     * Checks the diving jet support on every structure of the given wall of a Pab
     * @param wall the current wall to check
     * @param res the current result to add logs to, and set value
     * @param ca crossability array; mark non-crossable devices with "false" value at their index
     */
    protected checkDivingJetSupport(wall: ParallelStructure, res: Result, ca: boolean[]): void;
    /**
     * Checks the falls on every structure of the given wall of a Pab
     * @param wall the current wall to check
     * @param iRes the current result element to check on the wall result
     * @param res the current result to add logs to, and set value
     * @param ca crossability array; mark non-crossable devices with "false" value at their index
     * @param hasSJet true if current wall has at least one device with a surface jet (or an Orifice)
     * @param hasPJet true if current wall has at least one device with a diving jet
     */
    protected checkFalls(wall: ParallelStructure, iRes: ResultElement, res: Result, ca: boolean[], hasSJet: boolean, hasPJet: boolean): void;
    /**
     * Checks the basin depth on every structure of the given wall of a Pab
     * @param wall the current wall to check
     * @param iRes the current result element to check on the wall result
     * @param res the current result to add logs to, and set value
     * @param ca crossability array; mark non-crossable devices with "false" value at their index
     * @param hasSJet true if current wall has at least one device with a surface jet (or an Orifice)
     * @param hasPJet true if current wall has at least one device with a diving jet
     */
    protected checkBasinDepth(wall: ParallelStructure, iRes: ResultElement, res: Result, ca: boolean[], hasSJet: boolean, hasPJet: boolean): void;
    /**
     * Checks the basin length on every structure of the given wall of a Pab
     * @param wall the current wall to check
     * @param res the current result to add logs to, and set value
     * @param ca crossability array; mark non-crossable devices with "false" value at their index
     * @param hasSJet true if current wall has at least one device with a surface jet (or an Orifice)
     * @param hasPJet true if current wall has at least one device with a diving jet
     */
    protected checkBasinLength(wall: Cloisons, res: Result, ca: boolean[], hasSJet: boolean, hasPJet: boolean): void;
    /**
     * Checks the weirs and slots widths on every structure of the given wall of a Pab
     * @param wall the Pab wall to check
     * @param res the current result to add logs to, and set value
     * @param ca crossability array; mark non-crossable devices with "false" value at their index
     */
    protected checkWeirsAndSlotsWidth(wall: ParallelStructure, res: Result, ca: boolean[]): void;
    /**
     * Checks the head on weirs on every structure of the given wall of a Pab
     * @param wall the Pab wall to check
     * @param res the current result to add logs to, and set value
     * @param ca crossability array; mark non-crossable devices with "false" value at their index
     */
    protected checkHeadOnWeirs(wall: ParallelStructure, res: Result, ca: boolean[]): void;
    /**
     * Checks the dissipated power on the given wall of a Pab
     * @param wall the Pab wall to check
     * @param res the current result to add logs to, and set value
     */
    protected checkDissipatedPowerPAB(wall: ParallelStructure, res: Result): void;
    /**
     * Marks orifices as not supposed to be crossable, with a warning (jalhyd#249)
     * @param wall the Pab wall to check
     * @param res the current result to add logs to, and set value
     * @param ca crossability array; mark non-crossable devices with "false" value at their index
     */
    protected checkOrifices(wall: ParallelStructure, res: Result, ca: boolean[]): void;
    /**
     * Returns true if given wall has at least one device with a jet type among given jetTypes
     */
    protected hasJet(wall: ParallelStructure, jetTypes: StructureJetType | StructureJetType[]): boolean;
    /**
     * Returns indexes of the devices having given jet type, on the given wall
     * @param wall wall to check devices on
     * @param t jet type
     */
    protected getDevicesHavingJet(wall: ParallelStructure, t: StructureJetType): number[];
    /**
     * Returns indexes of the devices having given discharge law, on the given wall
     * @param wall wall to check devices on
     * @param l discharge law
     */
    protected getDevicesHavingLaw(wall: ParallelStructure, l: LoiDebit | LoiDebit[]): number[];
    /**
     * Checks a MacroRugo pass (factorized to use when checking MacroRugoCompound)
     * @param pass the MacroRugo pass to check
     * @param passResult the current result of the pass to check
     * @param verifResult the result of the check, to add logs to
     * @param apronNumber if defined, means that we're checking an apron of a MacroRugoCompound
     */
    protected checkMacroRugo(pass: MacroRugo, passResult: ResultElement, verifResult: Result, apronNumber?: number): number;
    /**
     * Load ICE tables values into parameters, depending on species
     * and pass to check
     */
    protected loadPredefinedParametersValues(): void;
    /**
     * Load ICE tables values into parameters, for a given species
     * (used in GUI for loading predefined species)
     */
    loadPredefinedSpecies(sp: FishSpecies): void;
    /** Parameters other than OK are just settings here, nothing can vary or be calculated */
    protected setParametersCalculability(): void;
}
//# sourceMappingURL=espece.d.ts.map