// Big oil-painter palette — 60 curated colors organized into families.
// Each color has a stable index used for color-by-numbers.

const BIG_PALETTE = [
  // Whites & creams (1-6)
  { hex: '#fafaf5', name: 'Gesso' },
  { hex: '#f0ebe2', name: 'Linen' },
  { hex: '#e8dfc8', name: 'Bone' },
  { hex: '#d8cbb0', name: 'Parchment' },
  { hex: '#c8b896', name: 'Khaki' },
  { hex: '#a89a78', name: 'Hemp' },
  // Blacks & greys (7-12)
  { hex: '#1a1a1a', name: 'Sumi Black' },
  { hex: '#2c2c2c', name: 'Charcoal' },
  { hex: '#4a4a4a', name: 'Slate' },
  { hex: '#6e6e6e', name: 'Stone' },
  { hex: '#9a9a9a', name: 'Ash' },
  { hex: '#c0c0c0', name: 'Pearl' },
  // Earths — browns (13-20)
  { hex: '#3d2418', name: 'Bistre' },
  { hex: '#5a3825', name: 'Walnut' },
  { hex: '#7a4f30', name: 'Sienna' },
  { hex: '#8b5a3c', name: 'Burnt Sienna' },
  { hex: '#a87850', name: 'Caramel' },
  { hex: '#c89968', name: 'Sand' },
  { hex: '#d8b890', name: 'Buff' },
  { hex: '#a8956b', name: 'Olive Earth' },
  // Reds (21-26)
  { hex: '#5a1a18', name: 'Oxblood' },
  { hex: '#8a2820', name: 'Vermillion Deep' },
  { hex: '#b83a2e', name: 'Cinnabar' },
  { hex: '#c84a32', name: 'Vermillion' },
  { hex: '#d97757', name: 'Coral Earth' },
  { hex: '#e8a890', name: 'Rose Dust' },
  // Pinks & roses (27-32)
  { hex: '#7d2848', name: 'Garnet' },
  { hex: '#a84868', name: 'Madder' },
  { hex: '#c87088', name: 'Old Rose' },
  { hex: '#d4a5a5', name: 'Powder' },
  { hex: '#e8c4c4', name: 'Petal' },
  { hex: '#fae8e8', name: 'Whisper' },
  // Oranges & ochres (33-38)
  { hex: '#a85820', name: 'Burnt Orange' },
  { hex: '#c87830', name: 'Rust' },
  { hex: '#d97740', name: 'Apricot Earth' },
  { hex: '#e8a84a', name: 'Marigold' },
  { hex: '#e8b04a', name: 'Saffron' },
  { hex: '#f0c870', name: 'Wheat' },
  // Yellows (39-42)
  { hex: '#8a6818', name: 'Amber Deep' },
  { hex: '#c89820', name: 'Mustard' },
  { hex: '#e8c850', name: 'Goldenrod' },
  { hex: '#f0dc88', name: 'Cream Yellow' },
  // Greens (43-50)
  { hex: '#2a3818', name: 'Pine' },
  { hex: '#3d5247', name: 'Forest' },
  { hex: '#5d7a6e', name: 'Sage Deep' },
  { hex: '#7a9b8e', name: 'Sage' },
  { hex: '#a8c4a8', name: 'Sage Light' },
  { hex: '#c8d6b9', name: 'Tea' },
  { hex: '#8a9858', name: 'Moss' },
  { hex: '#b8a878', name: 'Olive Pale' },
  // Blues (51-58)
  { hex: '#1a2440', name: 'Indigo' },
  { hex: '#2a3550', name: 'Prussian' },
  { hex: '#4a5d8a', name: 'Slate Blue' },
  { hex: '#7a8cb0', name: 'Periwinkle' },
  { hex: '#a8b5d0', name: 'Sky' },
  { hex: '#5a7090', name: 'Steel' },
  { hex: '#386878', name: 'Teal Deep' },
  { hex: '#6a98a4', name: 'Pale Teal' },
  // Purples (59-60)
  { hex: '#3a2848', name: 'Aubergine' },
  { hex: '#6a4878', name: 'Mulberry' },
];

// Default color-by-numbers assignment generator: deterministically pick a
// palette index per region, cycling through the palette. Caller can pass
// a seed function to vary.
function buildColorByNumbers(regions, paletteSize) {
  const map = {}; // region → 1-based palette index
  // simple hash on region string for deterministic but varied assignment
  regions.forEach((reg, i) => {
    let h = 0;
    for (let k = 0; k < reg.length; k++) h = (h * 31 + reg.charCodeAt(k)) | 0;
    map[reg] = (Math.abs(h + i) % paletteSize) + 1;
  });
  return map;
}

window.BIG_PALETTE = BIG_PALETTE;
window.buildColorByNumbers = buildColorByNumbers;
