import type BaseTileLayer from "./BaseTileLayer.js";
import type TileInfo from "./support/TileInfo.js";
import type { MultiOriginJSONSupportMixin } from "../core/MultiOriginJSONSupport.js";
import type { OperationalLayer, OperationalLayerProperties } from "./mixins/OperationalLayer.js";
import type { BaseTileLayerProperties } from "./BaseTileLayer.js";

export interface BingMapsLayerProperties extends BaseTileLayerProperties, OperationalLayerProperties, Partial<Pick<BingMapsLayer, "culture" | "key" | "region" | "style">> {}

/**
 * This layer supports Microsoft's Bing tiled map content.
 * Three map styles are supported - `road`, `aerial` and `hybrid`.
 * Please note that a valid [Bing Maps key](https://learn.microsoft.com/en-us/bingmaps/getting-started/bing-maps-dev-center-help/getting-a-bing-maps-key)
 * is required to use this layer.
 *
 * ```javascript
 * let bing = new BingMapsLayer({
 *   style: "aerial",
 *   key: "~~~~~~~~~~~~~~~~~~~~~~~~ Bing Maps key ~~~~~~~~~~~~~~~~~~~~~~~~~"
 * });
 * ```
 *
 * @deprecated since version 4.33.
 * @since 4.8
 * @see [Map](https://developers.arcgis.com/javascript/latest/api-reference/esri-Map.html)
 */
export default class BingMapsLayer extends BingMapsLayerSuperclass {
  /**
   * @example
   * // With a valid key this snippet will create a Bing maps layer that can be added to a map.
   * let bing = new BingMapsLayer({
   *   style: "aerial",
   *   key: "~~~~~~~~~~~~~~~~~~~~~~~~ Bing maps key ~~~~~~~~~~~~~~~~~~~~~~~~~"
   * });
   */
  constructor(properties?: BingMapsLayerProperties);
  /** Expose Bing logo url. */
  get bingLogo(): string | null;
  /** Copyright information. */
  get copyright(): string | null | undefined;
  /**
   * Provides culture specific map labels. For more information visit:
   * https://learn.microsoft.com/en-us/bingmaps/rest-services/common-parameters-and-types/culture-parameter
   *
   * For a list of supported culture codes please visit:
   * https://learn.microsoft.com/en-us/bingmaps/rest-services/common-parameters-and-types/supported-culture-codes
   *
   * @default "en-US"
   * @example
   * // To change the default culture.
   * let bing = new BingMapsLayer({
   *   key: "~~~~~~~~~~~~~~~~~~~~~~~~ Bing maps key ~~~~~~~~~~~~~~~~~~~~~~~~~",
   *   culture: "fr"
   * });
   */
  accessor culture: BingMapsCulture;
  /**
   * Indicates if the layer has attribution data.
   *
   * @default true
   */
  get hasAttributionData(): boolean;
  /**
   * Bing Maps Key.
   *
   * @example
   * // At minimum, a valid Bing key is required to create a Bing maps layer.
   * let bing = new BingMapsLayer({
   *   key: "~~~~~~~~~~~~~~~~~~~~~~~~ Bing maps key ~~~~~~~~~~~~~~~~~~~~~~~~~"
   * });
   */
  accessor key: string;
  /**
   * This will alter Geopolitical disputed borders and labels to align with the specified user region.
   *
   * For more information on Bing's region setting please visit:
   * https://learn.microsoft.com/en-us/bingmaps/rest-services/common-parameters-and-types/user-context-parameters
   *
   * For a list of supported country codes please visit:
   * see https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
   *
   * @example
   * // To adjust the Bing maps regional setting.
   * let bing = new BingMapsLayer({
   *   key: "~~~~~~~~~~~~~~~~~~~~~~~~ Bing maps key ~~~~~~~~~~~~~~~~~~~~~~~~~",
   *   region: "NZ"
   * });
   */
  accessor region: BingMapsRegion | null | undefined;
  /**
   * For more information on Bing map styles please visit:
   * https://learn.microsoft.com/en-us/bingmaps/rest-services/imagery/get-imagery-metadata
   *
   * @default "road"
   * @example
   * // To create a "hybrid" Bing maps layer with imagery overlaid with streets.
   * let bing = new BingMapsLayer({
   *   key: "~~~~~~~~~~~~~~~~~~~~~~~~ Bing maps key ~~~~~~~~~~~~~~~~~~~~~~~~~",
   *   style: "hybrid"
   * });
   */
  accessor style: BingMapsStyle;
  /** The tiling scheme information for the layer. */
  get tileInfo(): TileInfo;
  /** For [BaseTileLayer](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-BaseTileLayer.html) the type is `base-tile`. */
  get type(): "bing-maps";
}
declare const BingMapsLayerSuperclass: typeof BaseTileLayer & typeof MultiOriginJSONSupportMixin & typeof OperationalLayer

/** List of map styles supported by this layer. */
export type BingMapsStyle = "road" | "aerial" | "hybrid";

/** List of all supported cultures. */
export type BingMapsCulture = "af" | "am" | "ar-sa" | "as" | "az-Latn" | "be" | "bg" | "bn-BD" | "bn-IN" | "bs" | "ca" | "ca-ES-valencia" | "cs" | "cy" | "da" | "de" | "de-de" | "el" | "en-GB" | "en-US" | "es" | "es-ES" | "es-US" | "es-MX" | "et" | "eu" | "fa" | "fi" | "fil-Latn" | "fr" | "fr-FR" | "fr-CA" | "ga" | "gd-Latn" | "gl" | "gu" | "ha-Latn" | "he" | "hi" | "hr" | "hu" | "hy" | "id" | "ig-Latn" | "is" | "it" | "it-it" | "ja" | "ka" | "kk" | "km" | "kn" | "ko" | "kok" | "ku-Arab" | "ky-Cyrl" | "lb" | "lt" | "lv" | "mi-Latn" | "mk" | "ml" | "mn-Cyrl" | "mr" | "ms" | "mt" | "nb" | "ne" | "nl" | "nl-BE" | "nn" | "nso" | "or" | "pa" | "pa-Arab" | "pl" | "prs-Arab" | "pt-BR" | "pt-PT" | "qut-Latn" | "quz" | "ro" | "ru" | "rw" | "sd-Arab" | "si" | "sk" | "sl" | "sq" | "sr-Cyrl-BA" | "sr-Cyrl-RS" | "sr-Latn-RS" | "sv" | "sw" | "ta" | "te" | "tg-Cyrl" | "th" | "ti" | "tk-Latn" | "tn" | "tr" | "tt-Cyrl" | "ug-Arab" | "uk" | "ur" | "uz-Latn" | "vi" | "wo" | "xh" | "yo-Latn" | "zh-Hans" | "zh-Hant" | "zu";

/** List of all supported regions. */
export type BingMapsRegion = "AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AO" | "AQ" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BQ" | "BR" | "BS" | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CF" | "CG" | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CV" | "CW" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" | "GT" | "GU" | "GW" | "GY" | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MF" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PM" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RE" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH" | "SI" | "SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "SS" | "ST" | "SV" | "SX" | "SY" | "SZ" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "UM" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WF" | "WS" | "YE" | "YT" | "ZA" | "ZM" | "ZW";