import { BWC_ID } from "./BWC_ID.js";
import { BandNumber, RAT } from "./BandNumber.js";
/** Thrown when a BC-ID string cannot be parsed or is structurally invalid. */
export declare class InvalidBcIdException extends Error {
    constructor(message: string);
}
/**
 * The type of band combination.
 * - SC — single carrier (one band, one carrier)
 * - CA — carrier aggregation (NR-only, multiple carriers or bands)
 * - NRDC — NR dual connectivity
 * - ENDC — EN-DC (E-UTRA anchor + NR secondary)
 * - NEDC — NE-DC (NR anchor + E-UTRA secondary)
 */
export declare enum BcType {
    SC = "SC",
    CA = "CA",
    NRDC = "NR-DC",
    ENDC = "EN-DC",
    NEDC = "NE-DC"
}
/**
 * Splits a single band entry string (e.g. `"n78C"`, `"3A"`, `"(n)40CA"`) into
 * its RAT/BcType, BandNumber, and BWC-ID components.
 *
 * @param aString — a single band entry from a BC-ID (e.g. `"n1A"`, `"7C"`, `"(n)3AA"`).
 * @returns a tuple of [RAT or BcType, BandNumber, BWC_ID or raw string].
 * @throws InvalidBcIdException if the string cannot be parsed.
 */
export declare function SplitBandEntry(aString: string): [RAT | BcType, BandNumber, BWC_ID | string];
/**
 * Splits a BC-ID string into its RAT-level components.
 *
 * For inter-RAT DC identifiers containing `(n)`, the string is split around
 * the `(n)` marker. For NR-only or EUTRA-only identifiers, the string is
 * split on `_` (which separates the NR and EUTRA parts in DC identifiers).
 *
 * @param aString — the BC-ID value string (without prefix).
 * @returns an array of RAT-level component strings.
 */
export declare function GetRatComponents(aString: string | null): string[];
/**
 * Represents a 3GPP Band Combination Identifier (BC-ID).
 *
 * A BC-ID encodes one or more bands with their BWC-IDs, and optionally a
 * prefix (`CA_` or `DC_`) indicating carrier aggregation or dual connectivity.
 *
 * Examples:
 * - `"CA_n1A-n78C"` — inter-band CA with bands n1 (single carrier) and n78 (contiguous pair)
 * - `"DC_1A-8A_n77(2A)"` — EN-DC with EUTRA bands 1+8 and NR band n77 (two non-contiguous carriers)
 * - `"n78A"` — single-carrier NR configuration
 *
 * The class parses the identifier, determines the BcType (SC, CA, NR-DC, EN-DC, NE-DC),
 * extracts per-band BWC-IDs, and provides comparison operators for sorting.
 */
export declare class BC_ID {
    private readonly str;
    /** The prefix: `"CA_"`, `"DC_"`, or `""`. */
    prefix: string;
    /** If this BC-ID uses SUL naming, the original SUL name; otherwise null. */
    sulName: string | null;
    /** Total number of band entries in this BC-ID. */
    nrofBandEntries: number;
    /** Map from band number string (e.g. `"n78"`) to its BWC-ID or raw DC string. */
    bwcIdsPerBand: Map<string, BWC_ID | string>;
    /** True if any band has a BWC-ID other than `"A"` (i.e. intra-band CA). */
    intraBand: boolean;
    /** The determined combination type (SC, CA, NR-DC, EN-DC, NE-DC). */
    bctype: RAT | BcType | null;
    private bandNumberObjects;
    /**
     * Parses a BC-ID string or copies an existing BC_ID.
     *
     * @param aValue — the BC-ID string (e.g. `"CA_n1A-n78C"`, `"DC_1A_n77A"`)
     *   or an existing BC_ID to copy.
     * @throws InvalidBcIdException if the string cannot be parsed.
     */
    constructor(aValue: string | BC_ID | null);
    /** Returns the BC-ID value string (without prefix). */
    valueOf(): string;
    /** Returns the full BC-ID string including prefix (e.g. `"CA_n1A-n78C"`). */
    toString(): string;
    /** Returns a human-readable description including intra/inter-band and BcType. */
    describe(): string;
    /** Returns the BandNumber objects in this BC-ID, sorted by numeric value. */
    getBandNumbers(): BandNumber[];
    /** Returns the number of distinct bands in this BC-ID. */
    nrofBands(): number;
    /**
     * Returns the total number of component carriers across all bands.
     *
     * Sums the actual carrier count from each band's BWC-ID using getNrofCarriers().
     * E.g., "CA_n1A-n3A" returns 2 (1+1), "CA_n3B" returns 2 (contiguous pair),
     * "CA_n25(2A)-n41(A-C)" returns 5 (2*1 + 1 + 2).
     *
     * For DC configurations with EUTRA bands, the EUTRA carriers are not parsed
     * (BWC-ID is stored as a raw string), so the count uses a heuristic.
     */
    getNrofCarriers(): number;
    /** Returns true if all carriers belong to a single band. */
    isIntraBand(): boolean;
    /** Returns the map from band number string to BWC-ID (or raw DC string). */
    getBwcIDsPerBand(): Map<string, BWC_ID | string>;
    /** Returns true if this is a single-carrier configuration (one band, BWC = 'A'). */
    isSingleCarrier(): boolean;
    /** Returns true if the prefix is `"DC_"`. */
    isDualConnectivity(): boolean;
    /** Returns true if all bands are in FR1. */
    isFr1(): boolean;
    /** Returns true if all bands are in FR2. */
    isFr2(): boolean;
    /** Returns true if at least one band is in FR2. */
    hasFr2(): boolean;
    /** Returns true if this is a pure NR combination (no EUTRA bands, no EN-DC/NE-DC). */
    isNR(): boolean;
    /** Determines the specification this BC-ID belongs to. */
    getSpecification(): string;
    /** Returns the prefix string (`"CA_"`, `"DC_"`, or `""`). */
    getPrefix(): string;
    /** Returns true if this BC-ID uses SUL naming. */
    isSUL(): boolean;
    /** Returns true if this BC-ID has the same value string as `other`. */
    equals(other: BC_ID | string): boolean;
    /**
     * Ordering comparison for sorting BC-IDs.
     *
     * Compares first by number of bands (fewer first), then by band number
     * lists lexicographically, then by BWC-IDs per band.
     */
    lessThan(value: BC_ID | string): boolean;
    /** Returns true if this BC-ID is strictly greater than `value`. */
    greaterThan(value: BC_ID | string): boolean;
    /** Returns true if this BC-ID is less than or equal to `value`. */
    lessOrEqual(value: BC_ID | string): boolean;
    /** Returns true if this BC-ID is greater than or equal to `value`. */
    greaterOrEqual(value: BC_ID | string): boolean;
}
