/* ── v4 配色调色板 + 真实矢量地图「艺术化上色」 ──
   底图 = MapLibre + OpenFreeMap(真实街道/洱海岸线/街区/地名)。
   下面把整张地图的每一图层重新上成 杂志/水墨/ins 三套调子。 */

/* 每套调子:既给地图图层上色,也给上层 HTML 卡片/抽屉一套 CSS 变量。 */
const PALETTES = {
  journal: {
    id: "journal", name: "日系手账",
    map: {
      paper: "#F3EAD7", water: "#B6D0C9", waterLine: "#9CBCB3",
      green: "#CDD6AE", greenSoft: "#DCE0C2",
      building: "#E7D9BE", buildingLine: "#D8C6A4", buildingOpacity: 0.55,
      roadMajor: "#FBF6EA", roadMinor: "#F1E7D2", roadCase: "#E4D7BC",
      rail: "#D6C6A8", boundary: "#D8C8AC",
      textInk: "#5A4B3A", textHalo: "#F7F0E0",
    },
    route: "#B05E3B", routeCase: "#FFFDF8", routeDash: [0.1, 2.4],
    dayColors: ["#B05E3B", "#7C8A5E", "#6E86A8"],
    texture: 0.05,
    deco: { node: "sticker", badge: "circle", card: "note", cardRadius: 13, tape: true, rotate: -2.5,
            nodeText: "#B05E3B", roundLeg: 999 },
    vars: {
      "--paper": "#FBF7F0", "--paper-2": "#F2E9D7", "--ink": "#3B332B",
      "--ink-soft": "#7A6E62", "--ink-faint": "#A89A88", "--line": "#E7DCC8",
      "--font-display": '"Newsreader","Noto Serif SC","Songti SC",serif',
      "--font-body": '-apple-system,"PingFang SC","Noto Sans SC",sans-serif',
      "--font-hand": '"Kaiti SC","STKaiti","KaiTi","楷体","Noto Serif SC",serif',
      "--c-sight": "#B05E3B", "--c-food": "#C0623F", "--c-cafe": "#C8A45C",
      "--c-photo": "#A8769A", "--c-stay": "#6E86A8", "--c-nature": "#7C8A5E",
      "--card-bg": "#FFFDF8", "--card-line": "#EFE7D7",
      "--card-shadow": "0 6px 22px rgba(120,90,55,.18)",
    },
  },
  ink: {
    id: "ink", name: "国风水墨",
    map: {
      paper: "#EEE7D8", water: "#C3D1CC", waterLine: "#9FB3AD",
      green: "#CBCDB4", greenSoft: "#D7D8C2",
      building: "#DDD2BB", buildingLine: "#CABE A2".replace(" ", ""), buildingOpacity: 0.5,
      roadMajor: "#F4EFE2", roadMinor: "#E8DECB", roadCase: "#DBCFB6",
      rail: "#CFC0A4", boundary: "#CFC0A6",
      textInk: "#2E2B24", textHalo: "#F1EBDC",
    },
    route: "#4A4036", routeCase: "rgba(255,255,255,.7)", routeDash: [2.2, 1.6],
    dayColors: ["#5B4636", "#5F6F58", "#4E6A78"],
    texture: 0.08,
    deco: { node: "seal", badge: "stamp", card: "tag", cardRadius: 2, tape: false, rotate: 0,
            nodeText: "#F4EEDF", roundLeg: 2 },
    vars: {
      "--paper": "#F3EEE3", "--paper-2": "#E9E1D0", "--ink": "#2B2A26",
      "--ink-soft": "#6B655B", "--ink-faint": "#9A9182", "--line": "#DED3BE",
      "--font-display": '"Noto Serif SC","Songti SC",serif',
      "--font-body": '"Noto Serif SC",-apple-system,"PingFang SC",sans-serif',
      "--font-hand": '"Kaiti SC","STKaiti","KaiTi","楷体",serif',
      "--c-sight": "#6E5A48", "--c-food": "#9C5A4B", "--c-cafe": "#8A7A4A",
      "--c-photo": "#5C6B7A", "--c-stay": "#4A6470", "--c-nature": "#5F7257",
      "--card-bg": "#FBF8F0", "--card-line": "#E3D8C2",
      "--card-shadow": "0 4px 16px rgba(80,70,45,.16)",
    },
  },
  fresh: {
    id: "fresh", name: "清新ins",
    map: {
      paper: "#FBF6F1", water: "#C7E7EC", waterLine: "#A8D8DF",
      green: "#D6E8C6", greenSoft: "#E4F0D8",
      building: "#F0E7DB", buildingLine: "#E6D9C9", buildingOpacity: 0.5,
      roadMajor: "#FFFFFF", roadMinor: "#F6EFE7", roadCase: "#EFE6DB",
      rail: "#E4D6C6", boundary: "#EAD9CC",
      textInk: "#5A544D", textHalo: "#FFFFFF",
    },
    route: "#F0987A", routeCase: "#FFFFFF", routeDash: [0.1, 2.6],
    dayColors: ["#F0987A", "#7FB5A6", "#9BB0E0"],
    texture: 0.03,
    deco: { node: "dot", badge: "squircle", card: "pill", cardRadius: 18, tape: false, rotate: 0,
            nodeText: "#FFFFFF", roundLeg: 999 },
    vars: {
      "--paper": "#FFFDFB", "--paper-2": "#FBF3EE", "--ink": "#4A4540",
      "--ink-soft": "#8B847C", "--ink-faint": "#B8B0A7", "--line": "#F0EAE4",
      "--font-display": '"Noto Serif SC",-apple-system,"PingFang SC",sans-serif',
      "--font-body": '-apple-system,"PingFang SC","Noto Sans SC",sans-serif',
      "--font-hand": '"PingFang SC","Noto Sans SC",sans-serif',
      "--c-sight": "#7FB5A6", "--c-food": "#F0987A", "--c-cafe": "#E5B86B",
      "--c-photo": "#B8A0D8", "--c-stay": "#8FB0D8", "--c-nature": "#9BC48A",
      "--card-bg": "#FFFFFF", "--card-line": "#F0EAE4",
      "--card-shadow": "0 8px 24px rgba(150,130,110,.18)",
    },
  },
};
// 修正一处拼写
PALETTES.ink.map.buildingLine = "#CABEA2";

/* 把真实矢量地图的每一图层重新上色成当前调子 */
function recolorMap(map, pal) {
  const m = pal.map;
  const style = map.getStyle();
  if (!style || !style.layers) return;
  const set = (id, prop, val) => { try { map.setPaintProperty(id, prop, val); } catch (e) {} };
  const setL = (id, prop, val) => { try { map.setLayoutProperty(id, prop, val); } catch (e) {} };
  const hide = (id) => { try { map.setLayoutProperty(id, "visibility", "none"); } catch (e) {} };
  // 中文优先,去掉英文/拼音双行
  const zhFirst = ["coalesce", ["get", "name:zh"], ["get", "name:nonlatin"], ["get", "name:latin"], ["get", "name"]];

  for (const layer of style.layers) {
    const id = layer.id, t = layer.type;
    const has = (re) => re.test(id);
    if (t === "background") { set(id, "background-color", m.paper); continue; }

    if (t === "fill") {
      if (has(/water|ocean|sea|lake|river|reservoir/)) {
        set(id, "fill-color", m.water); set(id, "fill-opacity", 1);
      } else if (has(/building/)) {
        set(id, "fill-color", m.building); set(id, "fill-opacity", m.buildingOpacity);
        set(id, "fill-outline-color", m.buildingLine);
      } else if (has(/wood|forest|grass|park|garden|golf|pitch|vegetation|cemetery|farmland|scrub|meadow|recreation|landcover/)) {
        set(id, "fill-color", m.green); set(id, "fill-opacity", 0.7);
      } else if (has(/sand|beach|rock|bare/)) {
        set(id, "fill-color", m.greenSoft); set(id, "fill-opacity", 0.6);
      } else if (has(/landuse|residential|industrial|commercial|retail|aeroway|pedestrian|wetland/)) {
        set(id, "fill-color", m.greenSoft); set(id, "fill-opacity", 0.35);
      } else {
        set(id, "fill-color", m.greenSoft); set(id, "fill-opacity", 0.25);
      }
      continue;
    }

    if (t === "fill-extrusion") {
      set(id, "fill-extrusion-color", m.building);
      set(id, "fill-extrusion-opacity", 0.4);
      continue;
    }

    if (t === "line") {
      if (has(/water|river|canal|stream|waterway/)) {
        set(id, "line-color", m.waterLine);
      } else if (has(/building/)) {
        set(id, "line-color", m.buildingLine);
      } else if (has(/motorway|trunk|primary/)) {
        set(id, "line-color", m.roadMajor);
      } else if (has(/rail|transit|tram|subway/)) {
        set(id, "line-color", m.rail); set(id, "line-opacity", 0.6);
      } else if (has(/boundary|admin|border/)) {
        set(id, "line-color", m.boundary); set(id, "line-opacity", 0.5);
      } else if (has(/road|street|transportation|secondary|tertiary|service|minor|path|track|bridge|tunnel|link/)) {
        set(id, "line-color", m.roadMinor);
      } else {
        set(id, "line-color", m.roadCase); set(id, "line-opacity", 0.5);
      }
      continue;
    }

    if (t === "symbol") {
      // 隐藏底图自带的 POI 图标 + 公路编号盾牌(X093/S226/XU20 这类杂讯)
      if (has(/poi|aerodrome|airport|shop|amenity/)) { hide(id); continue; }
      if (has(/shield|ref|junction|exit|networ.|_ref|num/)) { hide(id); continue; }
      setL(id, "text-field", zhFirst);  // 中文优先,去英文双行
      set(id, "text-color", m.textInk);
      set(id, "text-halo-color", m.textHalo);
      set(id, "text-halo-width", 1.6);
      set(id, "icon-opacity", 0);
    }
  }
}

Object.assign(window, { PALETTES, recolorMap });
