declare enum VerseMode {
    indopak = "indopak",
    uthmani = "uthmani",
    uthmaniTajweed = "uthmaniTajweed",
    imlaei = "imlaei"
}
declare enum TranslationType {
    enMASAbdelHaleem = "enMASAbdelHaleem",
    idIndonesianIslamicAffairsMinistry = "idIndonesianIslamicAffairsMinistry",
    frMontadaIslamicFoundation = "frMontadaIslamicFoundation",
    trDarAlSalamCenter = "trDarAlSalamCenter"
}
declare enum AudioEdition {
    arAbdulbasitmurattal = "ar.Abdulbasitmurattal",
    arAbdullahbasfar = "ar.abdullahbasfar",
    arAbdurrahmaansudais = "ar.abdurrahmaansudais",
    arAbdulsamad = "ar.abdulsamad",
    arShaatree = "ar.shaatree",
    arAhmedajamy = "ar.ahmedajamy",
    arAlafasy = "ar.alafasy",
    arHanirifai = "ar.hanirifai",
    arHusary = "ar.husary",
    arHusarymujawwad = "ar.husarymujawwad",
    arHudhaify = "ar.hudhaify",
    arIbrahimakhbar = "ar.ibrahimakhbar",
    arMahermuaiqly = "ar.mahermuaiqly",
    arMinshawi = "ar.minshawi",
    arMinshawimujawwad = "ar.minshawimujawwad",
    arMuhammadayyoub = "ar.muhammadayyoub",
    arMuhammadjibreel = "ar.muhammadjibreel",
    arSaoodshuraym = "ar.saoodshuraym",
    enWalk = "en.walk",
    faHedayatfarfooladvand = "fa.hedayatfarfooladvand",
    arParhizgar = "ar.parhizgar",
    urKhan = "ur.khan",
    zhChinese = "zh.chinese",
    frLeclerc = "fr.leclerc",
    arAymanswoaid = "ar.aymanswoaid"
}
declare enum ErrorMessages {
    juzChapterVerseIsRequired = "Please fill juz number or chapter number or verse number.",
    juzNumberOutOfRange = "Juz number out of range",
    chapterNumberOutOfRange = "Chapter number out of range",
    verseNumberOutOfRange = "Verse number out of range",
    chapterNumberAndVerseNumberInvalid = "Invalid chapter number and/or verse number",
    verseKeyInvalid = "Invalid verse key"
}

type TranslatedName = {
    name: string;
    languageName: string;
};
type Translation = {
    id: number;
    name: string;
    authorName: string;
    slug: string;
    languageName: string;
    translatedName: TranslatedName;
};
type Verse = {
    id: number;
    verseKey: string;
    text: string;
    chapterID: number;
    pageNumber: number;
    juzNumber: number;
};
type VerseTranslation = {
    id: number;
    resourceID: number;
    text: string;
    verseKey: string;
    languageName: string;
};
type ChapterRevelationPlace = "makkah" | "madinah";
type ChapterTranslatedName = {
    [key: string]: string;
};
type Chapter = {
    id: number;
    bismillahPre: boolean;
    nameArabic: string;
    nameComplex: string;
    nameSimple: string;
    pages: number[];
    revelationOrder: number;
    revelationPlace: ChapterRevelationPlace;
    translatedName: ChapterTranslatedName;
    versesCount: number;
};
type Map<T> = {
    [key: string]: T;
};
type JuzVerse = {
    first: number;
    last: number;
    count: number;
    items: Map<String>;
};
type Juz = {
    id: number;
    number: number;
    verse: JuzVerse;
};
type Transliteration = {
    id: string;
    text: string;
};

type VerseComplete = {
    verse: Verse;
    translation: VerseTranslation;
};
type SearchResult = {
    chapters: Chapter[];
    verses: VerseComplete[];
};
declare class AlQuran {
    static get basmallah(): string;
    static get totalJuz(): number;
    static get totalChapter(): number;
    static get totalVerse(): number;
    static get totalMadaniSurah(): number;
    static get totalMakkiSurah(): number;
    static juz({ chapterNumber, verseNumber, juzNumber }: {
        chapterNumber?: number;
        verseNumber?: number;
        juzNumber?: number;
    }): Juz;
    static chapter(chapterNumber: number): Chapter;
    static verse(chapterNumber: number, verseNumber: number, mode?: VerseMode): Verse;
    static verseByJuz(juzNumber: number, mode?: VerseMode): Verse[];
    static verseByChapter(chapterNumber: number, mode?: VerseMode): Verse[];
    static translation(type: TranslationType, verseKey: string): VerseTranslation;
    static arabicNumber(number: number): string;
    static audioURLByChapter(chapterNumber: number, edition?: AudioEdition): string;
    static audioURLByVerse(verseNumber: number, edition?: AudioEdition): string;
    static imageURLByVerse(verseKey: string, isHighQuality?: boolean): string;
    static randomVerse(mode?: VerseMode, type?: TranslationType): VerseComplete;
    static search(keyword: string, type: TranslationType, verseMode?: VerseMode): SearchResult;
    static transliteration(verseKey: string): Transliteration;
}

export { AlQuran, AudioEdition, type Chapter, type ChapterRevelationPlace, type ChapterTranslatedName, ErrorMessages, type Juz, type JuzVerse, type Map, type SearchResult, type TranslatedName, type Translation, TranslationType, type Transliteration, type Verse, type VerseComplete, VerseMode, type VerseTranslation };
