// The "extra" spot markers — the ones ORTHOGONAL to the entity status.
//
// A spot's entity status (new DXCC / new band / new slot / worked) answers one
// question. These answer others that can be true at the same time: the park is
// new even if the entity is worked, the county is new even if the band is not.
// Both the DX-cluster list and the band map show them, and they have to agree —
// the same fact must not be green in one panel and violet in the next, so the
// colours live HERE and nowhere else. This is also the table a per-marker colour
// setting will drive, which is why it is a table rather than three constants.
//
// Colour choices:
//   POTA    green   — parks; the association is worth keeping
//   county  violet  — a chart hue, because every semantic token was already
//                     spoken for: red, orange and yellow are the entity
//                     statuses, blue is "callsign worked", green is POTA
//   worked  blue    — matches the WKD-CALL badge the cluster list has always used
//   prefix  yellow  — unchanged
//   grid    magenta — the last hue in the categorical set that is not already
//                     spoken for here and does not read as a status; a grid is
//                     never urgent the way a new entity is
export type SpotMarkerKey = 'new_pota' | 'new_county' | 'new_pfx' | 'worked_call' | 'new_grid' | 'new_state';

export type SpotMarker = {
  key: SpotMarkerKey;
  colour: string;  // a CSS colour — a var() reference, so it follows the theme
  labelKey: string; // i18n key, short form (badge / legend)
};

// Order is the display order, in both panels.
export const SPOT_MARKERS: SpotMarker[] = [
  { key: 'new_pota', colour: 'var(--success)', labelKey: 'clg2.newPota' },
  { key: 'new_county', colour: 'var(--chart-5)', labelKey: 'clg2.newCounty' },
  { key: 'new_pfx', colour: 'var(--caution)', labelKey: 'clg2.newPfx' },
  { key: 'new_grid', colour: 'var(--chart-7)', labelKey: 'clg2.newGrid' },
  { key: 'new_state', colour: 'var(--chart-3)', labelKey: 'clg2.newState' },
  { key: 'worked_call', colour: 'var(--info)', labelKey: 'clg2.wkdCall' },
];

export const markerColour = (key: SpotMarkerKey): string =>
  SPOT_MARKERS.find((m) => m.key === key)?.colour ?? 'var(--muted-foreground)';

// activeMarkers returns the markers set on a status entry, in display order.
export function activeMarkers(e: Record<string, unknown> | undefined): SpotMarker[] {
  if (!e) return [];
  return SPOT_MARKERS.filter((m) => !!e[m.key]);
}
