import { Mushaf, QuranMetadata, SuraInfo, Verse } from "../mushaf";
import { Direction, NavigationResult } from "../navigation";
import { IMushafEngine, NavigateParams } from "./iMushafEngine";
/**
 * Basic implementation of the Mushaf navigation engine
 */
export declare class BaseMushafEngine implements IMushafEngine {
    mushaf: Mushaf;
    quranMetadata: QuranMetadata;
    /**
     * Create a new BaseMushafEngine with the given Mushaf
     *
     * @param mushaf - The Mushaf to navigate through
     */
    constructor(mushaf: Mushaf);
    /**
     * Get metadata about a specific Sura
     *
     * @param suraNumber - Sura number (1-114)
     * @returns Information about the specified Sura, or undefined if not found
     */
    getSuraInfo(suraNumber: number): SuraInfo | undefined;
    /**
     * Find the next verse from a given verse in the specified direction
     *
     * @param params - Object containing sura_number, verse_number, and direction
     * @returns The next verse or undefined if at the end
     */
    nextVerse({ sura_number, verse_number, direction, }: {
        sura_number: number;
        verse_number: number;
        direction: Direction;
    }): Verse | undefined;
    /**
     * Find a verse in the mushaf and return its location (Verse, page, index_of_verse)
     *
     * @param suraNumber - Sura number (1-114)
     * @param verseNumber - Verse number within the sura
     * @returns The verse and its location, or undefined if not found
     */
    private findVerse;
    /**
     * Calculate the lines between start and end verses
     *
     * @param startSura - Start sura number
     * @param startVerse - Start verse number
     * @param endSura - End sura number
     * @param endVerse - End verse number
     * @param direction - Direction of navigation
     * @returns Number of lines between the two verses
     */
    calculateLines(startSura: number, startVerse: number, endSura: number, endVerse: number, direction: Direction): number;
    /**
     * Calculate the lines taken by a verse including any sura headers
     *
     * @param verse - The verse to calculate lines for
     * @returns The total number of lines taken by the verse
     */
    private calculateVerseLines;
    /**
     * Check if verses are in opposite direction
     *
     * @param startSura - Start sura number
     * @param endSura - End sura number
     * @param direction - Direction of navigation
     * @returns True if verses are in opposite direction
     */
    private static isInOppositeDirection;
    /**
     * Determine which last of sura result to prefer
     *
     * @param lastOfSura - Existing last of sura result, if any
     * @param currentVerse - Current verse being processed
     * @param direction - Direction of navigation
     * @returns The preferred last of sura result
     */
    private preferLastOfSura;
    /**
     * Determine which last of page result to prefer
     *
     * @param lastOfPage - Existing last of page result, if any
     * @param currentVerse - Current verse being processed
     * @param direction - Direction of navigation
     * @returns The preferred last of page result
     */
    private preferLastOfPage;
    /**
     * Navigate from a verse by a specified number of lines in the given direction
     *
     * @param params - Navigation parameters
     * @returns Navigation result containing the verse at the destination after navigation
     */
    navigate(params: NavigateParams): NavigationResult;
}
