/**
 * @fileoverview CoveragePercentage value object
 *
 * This module defines the CoveragePercentage value object which represents
 * code coverage as a percentage with specific validation and formatting rules.
 */
import { ValueObject } from '../shared/value-object.js';
/**
 * Properties for the CoveragePercentage value object
 */
interface CoveragePercentageProps {
    value: number;
    decimalPlaces: number;
}
/**
 * Value object representing code coverage as a percentage
 *
 * Ensures that coverage values are always between 0 and 100 (inclusive)
 * and provides specialized formatting and comparison methods.
 *
 * @example
 * ```typescript
 * const coverage = CoveragePercentage.create(85.567);
 * console.log(coverage.toString()); // "85.6%"
 * console.log(coverage.isAcceptable(80)); // true
 *
 * const perfect = CoveragePercentage.perfect();
 * console.log(perfect.value); // 100
 * ```
 */
export declare class CoveragePercentage extends ValueObject<CoveragePercentageProps> {
    private constructor();
    /**
     * Creates a new CoveragePercentage instance
     *
     * @param value - The coverage percentage (0-100)
     * @param decimalPlaces - Number of decimal places for display (default: 1)
     * @returns A new CoveragePercentage instance
     * @throws Error if value is outside 0-100 range
     */
    static create(value: number, decimalPlaces?: number): CoveragePercentage;
    /**
     * Creates a zero coverage instance
     *
     * @returns A new CoveragePercentage with 0% coverage
     */
    static zero(): CoveragePercentage;
    /**
     * Creates a perfect coverage instance
     *
     * @returns A new CoveragePercentage with 100% coverage
     */
    static perfect(): CoveragePercentage;
    /**
     * Creates a coverage percentage from a fraction
     *
     * @param covered - Number of covered items
     * @param total - Total number of items
     * @param decimalPlaces - Number of decimal places for display
     * @returns A new CoveragePercentage instance
     * @throws Error if total is zero or negative
     */
    static fromFraction(covered: number, total: number, decimalPlaces?: number): CoveragePercentage;
    /**
     * Gets the percentage value
     */
    get value(): number;
    /**
     * Gets the number of decimal places for display
     */
    get decimalPlaces(): number;
    /**
     * Checks if coverage is zero
     */
    get isZero(): boolean;
    /**
     * Checks if coverage is perfect (100%)
     */
    get isPerfect(): boolean;
    /**
     * Gets the coverage level category
     */
    get level(): 'excellent' | 'good' | 'fair' | 'poor';
    /**
     * Checks if the coverage meets or exceeds a threshold
     *
     * @param threshold - The minimum acceptable percentage
     * @returns True if coverage meets the threshold
     */
    isAcceptable(threshold: number): boolean;
    /**
     * Calculates the improvement needed to reach a target
     *
     * @param target - The target percentage
     * @returns The percentage points needed to reach the target
     */
    improvementNeeded(target: number): number;
    /**
     * Combines this coverage with another (weighted average)
     *
     * @param other - The other coverage percentage
     * @param thisWeight - Weight for this coverage (default: 1)
     * @param otherWeight - Weight for the other coverage (default: 1)
     * @returns A new CoveragePercentage with the weighted average
     */
    combine(other: CoveragePercentage, thisWeight?: number, otherWeight?: number): CoveragePercentage;
    /**
     * Returns a formatted string representation
     */
    toString(): string;
    /**
     * Returns a display string with the coverage level
     */
    toDisplayString(): string;
}
export {};
