import maplibregl, { LayerSpecification } from "maplibre-gl";
import { MAP_TEXT_FONT_STACK } from "./textFonts";

const LINE_GEOMETRY_FILTER: maplibregl.ExpressionSpecification = [
    "any",
    ["==", ["geometry-type"], "LineString"],
    ["==", ["geometry-type"], "MultiLineString"],
];

export function getLineLabelLayers(sourceId: string): LayerSpecification[] {
    return [
        {
            id: "line-labels-text",
            type: "symbol",
            source: sourceId,
            filter: ["all", LINE_GEOMETRY_FILTER, ["!=", ["coalesce", ["get", "line_label"], ""], ""]],
            minzoom: 5,
            layout: {
                "text-font": [...MAP_TEXT_FONT_STACK],
                "symbol-placement": "line",
                "symbol-spacing": 280,
                "text-field": ["coalesce", ["get", "line_label"], ""],
                "text-size": [
                    "interpolate",
                    ["linear"],
                    ["zoom"],
                    1, 11,
                    4, 13,
                    6, 15,
                ],
                "text-keep-upright": true,
                "text-max-angle": 35,
                "text-max-width": 12,
                "text-padding": 2,
                "text-allow-overlap": false,
                "text-ignore-placement": false,
                "text-optional": true,
            },
            paint: {
                "text-color": "#f8fafc",
                "text-halo-color": "#0f172a",
                "text-halo-width": 1.4,
                "text-halo-blur": 0.25,
            },
        },
    ];
}
