interface Language {
    code: string;
    name: string;
    flag: string;
}
interface CountryData {
    name: string;
    alpha2: string;
    alpha3: string;
    officialLanguageCode: string;
    flag: string;
    countryCallingCodes: string[];
    currencies: string[];
    languages: Language[];
}
interface CountryOption {
    name: string;
    code: string;
    flag: string;
}
type SortType = 'asc' | 'desc';
type CountryCodeArray = CountryData['alpha2'][];
interface SortOptions {
    topCountryCodes?: CountryCodeArray;
    sortBy?: SortType;
    countries?: CountryCodeArray | CountryData[];
}
interface CountryOptionsParams extends SortOptions {
    countries: CountryCodeArray | CountryData[];
}
declare class Country {
    private static readonly countriesData;
    /**
     * Find a country by its country code (alpha2 or alpha3)
     * @param {string} code - Country code (alpha2 or alpha3)
     * @returns {CountryData | undefined} Immutable country object
     */
    findCountryByCountryCode(code: string): CountryData | undefined;
    /**
     * Find countries by a list of country codes
     * @param {string[]} countryCodeList - Array of country codes
     * @returns {CountryData[]} Array of immutable country objects
     */
    findCountriesByCountryCodeList(countryCodeList: string[]): CountryData[];
    /**
     * Generic method to get a country property by country code
     * @param {K} property - Property name to retrieve
     * @param {string} code - Country code
     * @returns {CountryData[K] | undefined} Property value
     */
    getCountryBy<K extends keyof CountryData>(property: K, code: string): CountryData[K] | undefined;
    /**
     * Get country name by country code
     * @param {string} code - Country code
     * @returns {string} Country name or code if not found
     */
    getCountryNameByCountryCode(code: string): string;
    /**
     * Find a country by any language code (not just official)
     * @param {string} languageCode - Language code
     * @returns {CountryData | undefined} Immutable country object
     */
    findCountryByLanguageCode(languageCode: string): CountryData | undefined;
    /**
     * Get country code by language code
     * @param {string} languageCode - Language code
     * @returns {string | undefined} Alpha2 country code
     */
    getCountryCodeByLanguageCode(languageCode: string): string | undefined;
    /**
     * Get all countries
     * @returns {CountryData[]} Array of immutable country objects
     */
    getAllCountryList(): CountryData[];
    /**
     * Get sorted countries with optional top countries
     * @param {SortOptions} options - Sorting options
     * @returns {CountryData[]} Sorted array of country objects
     */
    getSortedCountries(options?: SortOptions): CountryData[];
    /**
     * Get sorted country codes
     * @param {SortOptions} options - Same as getSortedCountries
     * @returns {string[]} Array of alpha2 country codes
     */
    getSortedCountryCodes(options?: SortOptions): string[];
    /**
     * Find a Language object by language code.
     * Iterates through all countries and their languages.
     * @param {string} languageCode - Language code (e.g. 'en')
     * @returns {Language | undefined} Immutable language object
     */
    findLanguageByLanguageCode(languageCode: string): Language | undefined;
    /**
     * Get the language name for a given country code.
     * @param {string} countryCode - Country alpha2 or alpha3 code
     * @returns {string} Language name or fallback value
     */
    findLanguageNameByCountryCode(countryCode: string): string;
    /**
     * Get official language code by country code
     * @param {string} code - Country code
     * @returns {string | undefined} Language code
     */
    getOfficialLanguageCodeByCountryCode(code: string): string | undefined;
    /**
     * Get country options for select components (sorted)
     * @param {CountryOptionsParams | CountryData[] | CountryCodeArray} params - Countries with optional sort options
     * @returns {CountryOption[]} Array of option objects
     */
    getCountryOptions(params: CountryOptionsParams | CountryData[] | CountryCodeArray): CountryOption[];
    /**
     * Get flag icon URL
     * @param {string} alpha2 - Country code
     * @param {'1x1' | '4x3'} ratio - Flag ratio
     * @returns {string} Flag icon URL
     */
    getFlagIconUrl(alpha2: string, ratio?: '1x1' | '4x3'): string;
    /**
     * Get globe icon URL
     * @returns {string} Globe icon URL
     */
    getGlobeIconUrl(): string;
}
export declare const maCountry: Country;
export {};
