/* *
 *
 *  Imports
 *
 * */
import RendererRegistry from '../../Core/Renderer/RendererRegistry.js';
import SVGRenderer from '../../Core/Renderer/SVG/SVGRenderer.js';
var symbols = SVGRenderer.prototype.symbols;
/* *
 *
 *  Symbols
 *
 * */
// create the flag icon with anchor
symbols.flag = function (x, y, w, h, options) {
    var anchorX = (options && options.anchorX) || x, anchorY = (options && options.anchorY) || y;
    // To do: unwanted any cast because symbols.circle has wrong type, it
    // actually returns an SVGPathArray
    var path = symbols.circle(anchorX - 1, anchorY - 1, 2, 2);
    path.push(['M', anchorX, anchorY], ['L', x, y + h], ['L', x, y], ['L', x + w, y], ['L', x + w, y + h], ['L', x, y + h], ['Z']);
    return path;
};
/**
 * Create the circlepin and squarepin icons with anchor.
 * @private
 * @param {string} shape
 * circle or square
 */
function createPinSymbol(shape) {
    symbols[(shape + 'pin')] = function (x, y, w, h, options) {
        var anchorX = options && options.anchorX, anchorY = options && options.anchorY;
        var path;
        // For single-letter flags, make sure circular flags are not taller
        // than their width
        if (shape === 'circle' && h > w) {
            x -= Math.round((h - w) / 2);
            w = h;
        }
        path = (symbols[shape])(x, y, w, h);
        if (anchorX && anchorY) {
            /**
             * If the label is below the anchor, draw the connecting line from
             * the top edge of the label, otherwise start drawing from the
             * bottom edge
             */
            var labelX = anchorX;
            if (shape === 'circle') {
                labelX = x + w / 2;
            }
            else {
                var startSeg = path[0];
                var endSeg = path[1];
                if (startSeg[0] === 'M' && endSeg[0] === 'L') {
                    labelX = (startSeg[1] + endSeg[1]) / 2;
                }
            }
            var labelY = (y > anchorY) ? y : y + h;
            path.push([
                'M',
                labelX,
                labelY
            ], [
                'L',
                anchorX,
                anchorY
            ]);
            path = path.concat(symbols.circle(anchorX - 1, anchorY - 1, 2, 2));
        }
        return path;
    };
}
createPinSymbol('circle');
createPinSymbol('square');
/**
 * The symbol callbacks are generated on the SVGRenderer object in all browsers.
 * Even VML browsers need this in order to generate shapes in export. Now share
 * them with the VMLRenderer.
 */
var Renderer = RendererRegistry.getRendererType();
if (Renderer !== SVGRenderer) {
    Renderer.prototype.symbols.circlepin = symbols.circlepin;
    Renderer.prototype.symbols.flag = symbols.flag;
    Renderer.prototype.symbols.squarepin = symbols.squarepin;
}
/* *
 *
 *  Default Export
 *
 * */
export default symbols;
