/**
 * @typedef {Object} MapFishPrintCapabilities
 * @property {MapFishPrintCapabilitiesLayout[]} layouts
 * @property {string[]} formats
 * @property {MapFishPrintCapabilitiesSMTP} [smtp] STMP object definition
 */
/**
 * Fields that can come from a print v3 server and can be used in the partial
 * of the gmf print panel.
 *
 * @typedef {Object} MapFishPrintCapabilitiesLayout
 * @property {string} name
 * @property {MapFishPrintCapabilitiesLayoutAttribute[]} [attributes] Custom print layoutInfo.
 */
/**
 * @typedef {Object} MapFishPrintCapabilitiesLayoutAttribute
 * @property {string} name Name of the form field.
 * @property {string|boolean|number} [default] Default value of the form field.
 * @property {string} [value] Not returned by the print, added by ngeo.
 * @property {string} type Type of the field. Can be 'String', 'Boolean' or 'Number'.
 * @property {Object<string, MapFishPrintCapabilitiesLayoutAttributeClientParamsElement>} [clientParams] The client info description.
 * @property {MapFishPrintCapabilitiesLayoutAttributeClientInfo} [clientInfo] Only for the map.
 */
/**
 * @typedef {Object} MapFishPrintCapabilitiesLayoutAttributeClientParamsElement
 * @property {string|boolean|number} [default] Default value of the form field.
 * @property {string} type Type of the field. Can be 'String', 'Boolean' or 'Number'.
 * @property {boolean} [isArray] Is an array
 * @property {Object<string, MapFishPrintCapabilitiesLayoutAttributeClientParamsElement>} embeddedType The embedded types.
 */
/**
 * @typedef {Object} MapFishPrintCapabilitiesLayoutAttributeClientInfo
 * @property {number[]} dpiSuggestions
 * @property {number[]} scales
 * @property {number} maxDpi
 * @property {number} width
 * @property {number} height
 */
/**
 * @typedef {Object} MapFishPrintCapabilitiesSMTP
 * @property {boolean} enabled
 */
/**
 * @typedef {Object} DataSourceTableObject
 * @property {string[]} columns
 * @property {(string|number|boolean)[][]} data
 */
/**
 * @typedef {Object} DataSourcePrintReportObject
 * @property {string} title
 * @property {DataSourceTableObject} table
 */
/**
 * @typedef {Object} MapFishPrintSpec
 * @property {MapFishPrintAttributes} attributes
 * @property {string} layout
 * @property {string} format
 * @property {string} lang
 * @property {MapFishPrintSMTP} [smtp] STMP object definition
 */
/**
 * @typedef {Object} MapFishPrintAttributes
 * @property {MapFishPrintMap} map
 */
/**
 * @typedef {Object} MapFishPrintMap
 * @property {number[]} bbox
 * @property {number[]} center
 * @property {number} scale
 * @property {number} dpi
 * @property {MapFishPrintLayer[]} layers
 * @property {string} projection
 * @property {number} rotation
 * @property {boolean} [useNearestScale] Indicates if the map should adjust its scale/zoom level to be
 *    equal to one of those defined in the configuration file.
 */
/**
 * @typedef {Object} MapFishPrintLayer
 * @property {string} type
 * @property {number} opacity
 */
/**
 * extends {MapFishPrintLayer}
 *
 * @typedef {Object} MapFishPrintVectorLayer
 * @property {string} type (MapFishPrintLayer)
 * @property {number} opacity (MapFishPrintLayer)
 * @property {import("geojson").GeoJsonObject} geoJson
 * @property {MapFishPrintVectorStyle} style
 */
/**
 * A MapFishPrintVectorStyle Must contains one key "version" with the version the use as value.
 * Others key-values are MapFishPrintSymbolizers.
 *
 * @typedef {Object<string, number|import('ngeo/print/mapfish-print-v3').MapFishPrintSymbolizers>} MapFishPrintVectorStyle
 */
/**
 * extends {MapFishPrintLayer}
 *
 * @typedef {Object} MapFishPrintWmsLayer
 * @property {string} type (MapFishPrintLayer)
 * @property {number} opacity (MapFishPrintLayer)
 * @property {string} baseURL
 * @property {Object<string, string>} customParams
 * @property {string[]} layers
 * @property {string} serverType
 * @property {string[]} [styles]
 * @property {string} version
 * @property {boolean} useNativeAngle
 * @property {string} imageFormat
 */
/**
 * @typedef {Object} MapFishPrintWmtsMatrix
 * @property {string} identifier
 * @property {number} scaleDenominator
 * @property {number[]} tileSize
 * @property {number[]} topLeftCorner
 * @property {number[]} matrixSize
 */
/**
 * extends {MapFishPrintLayer}
 *
 * @typedef {Object} MapFishPrintWmtsLayer
 * @property {string} type (MapFishPrintLayer)
 * @property {number} opacity (MapFishPrintLayer)
 * @property {string} baseURL
 * @property {Object} dimensions
 * @property {Object} dimensionParams
 * @property {string} imageFormat
 * @property {string} layer
 * @property {MapFishPrintWmtsMatrix[]} matrices
 * @property {string} matrixSet
 * @property {string} requestEncoding
 * @property {string} style
 * @property {string} version
 */
/**
 * @typedef {Object} MapFishPrintReportResponse
 * @property {string} ref
 * @property {string} [statusURL]
 * @property {string} [downloadURL]
 */
/**
 * @typedef {Object} MapFishPrintStatusResponse
 * @property {boolean} done
 * @property {string} [status]
 * @property {string} [error]
 * @property {string} [downloadURL]
 */
/**
 * @typedef {Object} MapFishPrintSymbolizers
 * @property {MapFishPrintSymbolizer[]} symbolizers
 */
/**
 * @typedef {Object} MapFishPrintSymbolizer
 * @property {string} type
 */
/**
 * extends {MapFishPrintSymbolizer}
 *
 * @typedef {Object} MapFishPrintSymbolizerLine
 * @property {string} type (MapFishPrintSymbolizer)
 * @property {string} strokeColor
 * @property {number} strokeOpacity
 * @property {number} strokeWidth
 * @property {string} strokeDashstyle
 * @property {string} strokeLinecap
 */
/**
 * extends {MapFishPrintSymbolizer}
 *
 * @typedef {Object} MapFishPrintSymbolizerPoint
 * @property {string} type (MapFishPrintSymbolizer)
 * @property {string} externalGraphic
 * @property {string} graphicFormat
 * @property {number} graphicOpacity
 * @property {number} graphicHeight
 * @property {number} graphicWidth
 * @property {string} fillColor
 * @property {number} fillOpacity
 * @property {number} pointRadius
 * @property {number} rotation
 * @property {string} strokeColor
 * @property {number} strokeOpacity
 * @property {number} strokeWidth
 * @property {string} graphicName
 */
/**
 * extends {MapFishPrintSymbolizer}
 *
 * @typedef {Object} MapFishPrintSymbolizerPolygon
 * @property {string} type (MapFishPrintSymbolizer)
 * @property {string} fillColor
 * @property {number} fillOpacity
 * @property {string} strokeColor
 * @property {number} strokeOpacity
 * @property {number} strokeWidth
 * @property {string} strokeDashstyle
 */
/**
 * extends {MapFishPrintSymbolizer}
 *
 * @typedef {Object} MapFishPrintSymbolizerText
 * @property {string} type (MapFishPrintSymbolizer)
 * @property {string} label
 * @property {string} labelAlign
 * @property {string} labelRotation
 * @property {string} fontWeight
 * @property {string} fontSize
 * @property {string} fontFamily
 * @property {number} labelXOffset
 * @property {number} labelYOffset
 * @property {string} haloColor
 * @property {number} haloOpacity
 * @property {number} haloRadius
 * @property {string} fontColor
 * @property {number} goodnessOfFit
 */
/**
 * @typedef {Object} MapFishPrintSMTP
 * @property {string} to Email address
 */
/**
 * @typedef {Object} MapFishPrintLegend
 * @property {MapFishPrintLegendClass[]} classes
 */
/**
 * @typedef {Object} MapFishPrintLegendClass
 * @property {string} [name]
 * @property {string[]} [icons]
 * @property {number} [dpi]
 * @property {MapFishPrintLegendClass[]} [classes]
 */
/**
 * @hidden
 * @type {null}
 */
export const nothing: null;
export type MapFishPrintCapabilities = {
    layouts: MapFishPrintCapabilitiesLayout[];
    formats: string[];
    /**
     * STMP object definition
     */
    smtp?: MapFishPrintCapabilitiesSMTP;
};
/**
 * Fields that can come from a print v3 server and can be used in the partial
 * of the gmf print panel.
 */
export type MapFishPrintCapabilitiesLayout = {
    name: string;
    /**
     * Custom print layoutInfo.
     */
    attributes?: MapFishPrintCapabilitiesLayoutAttribute[];
};
export type MapFishPrintCapabilitiesLayoutAttribute = {
    /**
     * Name of the form field.
     */
    name: string;
    /**
     * Default value of the form field.
     */
    default?: string | boolean | number;
    /**
     * Not returned by the print, added by ngeo.
     */
    value?: string;
    /**
     * Type of the field. Can be 'String', 'Boolean' or 'Number'.
     */
    type: string;
    /**
     * The client info description.
     */
    clientParams?: {
        [x: string]: MapFishPrintCapabilitiesLayoutAttributeClientParamsElement;
    };
    /**
     * Only for the map.
     */
    clientInfo?: MapFishPrintCapabilitiesLayoutAttributeClientInfo;
};
export type MapFishPrintCapabilitiesLayoutAttributeClientParamsElement = {
    /**
     * Default value of the form field.
     */
    default?: string | boolean | number;
    /**
     * Type of the field. Can be 'String', 'Boolean' or 'Number'.
     */
    type: string;
    /**
     * Is an array
     */
    isArray?: boolean;
    /**
     * The embedded types.
     */
    embeddedType: {
        [x: string]: MapFishPrintCapabilitiesLayoutAttributeClientParamsElement;
    };
};
export type MapFishPrintCapabilitiesLayoutAttributeClientInfo = {
    dpiSuggestions: number[];
    scales: number[];
    maxDpi: number;
    width: number;
    height: number;
};
export type MapFishPrintCapabilitiesSMTP = {
    enabled: boolean;
};
export type DataSourceTableObject = {
    columns: string[];
    data: (string | number | boolean)[][];
};
export type DataSourcePrintReportObject = {
    title: string;
    table: DataSourceTableObject;
};
export type MapFishPrintSpec = {
    attributes: MapFishPrintAttributes;
    layout: string;
    format: string;
    lang: string;
    /**
     * STMP object definition
     */
    smtp?: MapFishPrintSMTP;
};
export type MapFishPrintAttributes = {
    map: MapFishPrintMap;
};
export type MapFishPrintMap = {
    bbox: number[];
    center: number[];
    scale: number;
    dpi: number;
    layers: MapFishPrintLayer[];
    projection: string;
    rotation: number;
    /**
     * Indicates if the map should adjust its scale/zoom level to be
     * equal to one of those defined in the configuration file.
     */
    useNearestScale?: boolean;
};
export type MapFishPrintLayer = {
    type: string;
    opacity: number;
};
/**
 * extends {MapFishPrintLayer}
 */
export type MapFishPrintVectorLayer = {
    /**
     * (MapFishPrintLayer)
     */
    type: string;
    /**
     * (MapFishPrintLayer)
     */
    opacity: number;
    geoJson: import("geojson").GeoJsonObject;
    style: MapFishPrintVectorStyle;
};
/**
 * A MapFishPrintVectorStyle Must contains one key "version" with the version the use as value.
 * Others key-values are MapFishPrintSymbolizers.
 */
export type MapFishPrintVectorStyle = {
    [x: string]: number | import("ngeo/print/mapfish-print-v3").MapFishPrintSymbolizers;
};
/**
 * extends {MapFishPrintLayer}
 */
export type MapFishPrintWmsLayer = {
    /**
     * (MapFishPrintLayer)
     */
    type: string;
    /**
     * (MapFishPrintLayer)
     */
    opacity: number;
    baseURL: string;
    customParams: {
        [x: string]: string;
    };
    layers: string[];
    serverType: string;
    styles?: string[];
    version: string;
    useNativeAngle: boolean;
    imageFormat: string;
};
export type MapFishPrintWmtsMatrix = {
    identifier: string;
    scaleDenominator: number;
    tileSize: number[];
    topLeftCorner: number[];
    matrixSize: number[];
};
/**
 * extends {MapFishPrintLayer}
 */
export type MapFishPrintWmtsLayer = {
    /**
     * (MapFishPrintLayer)
     */
    type: string;
    /**
     * (MapFishPrintLayer)
     */
    opacity: number;
    baseURL: string;
    dimensions: Object;
    dimensionParams: Object;
    imageFormat: string;
    layer: string;
    matrices: MapFishPrintWmtsMatrix[];
    matrixSet: string;
    requestEncoding: string;
    style: string;
    version: string;
};
export type MapFishPrintReportResponse = {
    ref: string;
    statusURL?: string;
    downloadURL?: string;
};
export type MapFishPrintStatusResponse = {
    done: boolean;
    status?: string;
    error?: string;
    downloadURL?: string;
};
export type MapFishPrintSymbolizers = {
    symbolizers: MapFishPrintSymbolizer[];
};
export type MapFishPrintSymbolizer = {
    type: string;
};
/**
 * extends {MapFishPrintSymbolizer}
 */
export type MapFishPrintSymbolizerLine = {
    /**
     * (MapFishPrintSymbolizer)
     */
    type: string;
    strokeColor: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeDashstyle: string;
    strokeLinecap: string;
};
/**
 * extends {MapFishPrintSymbolizer}
 */
export type MapFishPrintSymbolizerPoint = {
    /**
     * (MapFishPrintSymbolizer)
     */
    type: string;
    externalGraphic: string;
    graphicFormat: string;
    graphicOpacity: number;
    graphicHeight: number;
    graphicWidth: number;
    fillColor: string;
    fillOpacity: number;
    pointRadius: number;
    rotation: number;
    strokeColor: string;
    strokeOpacity: number;
    strokeWidth: number;
    graphicName: string;
};
/**
 * extends {MapFishPrintSymbolizer}
 */
export type MapFishPrintSymbolizerPolygon = {
    /**
     * (MapFishPrintSymbolizer)
     */
    type: string;
    fillColor: string;
    fillOpacity: number;
    strokeColor: string;
    strokeOpacity: number;
    strokeWidth: number;
    strokeDashstyle: string;
};
/**
 * extends {MapFishPrintSymbolizer}
 */
export type MapFishPrintSymbolizerText = {
    /**
     * (MapFishPrintSymbolizer)
     */
    type: string;
    label: string;
    labelAlign: string;
    labelRotation: string;
    fontWeight: string;
    fontSize: string;
    fontFamily: string;
    labelXOffset: number;
    labelYOffset: number;
    haloColor: string;
    haloOpacity: number;
    haloRadius: number;
    fontColor: string;
    goodnessOfFit: number;
};
export type MapFishPrintSMTP = {
    /**
     * Email address
     */
    to: string;
};
export type MapFishPrintLegend = {
    classes: MapFishPrintLegendClass[];
};
export type MapFishPrintLegendClass = {
    name?: string;
    icons?: string[];
    dpi?: number;
    classes?: MapFishPrintLegendClass[];
};
