// room-data.jsx v4 — adds proximity field.
// proximity: 0.0 = very close connection, 1.0 = distant stranger
// Inner shells = close, outer shells = distant.

const ROOM_MOODS = [
  { key:"social",   label:"Social",   color:"#FF6B6B", desc:"Wants energy",         size:1.10 },
  { key:"open",     label:"Open",     color:"#3A7FCC", desc:"Open to chat",         size:1.05 },
  { key:"building", label:"Building", color:"#00C49A", desc:"Working on something", size:1.02 },
  { key:"curious",  label:"Curious",  color:"#F5A623", desc:"Exploring ideas",      size:0.96 },
  { key:"focused",  label:"Focused",  color:"#A8A8A8", desc:"Heads-down",           size:0.85 },
];
const MOOD_BY_KEY = Object.fromEntries(ROOM_MOODS.map(m=>[m.key,m]));
const MOOD_MIX    = { social:0.18, open:0.26, building:0.20, curious:0.16, focused:0.20 };
// Social/open people tend to be closer (they seek interaction); focused → outer
const PROXIMITY_BIAS = { social:-0.14, open:-0.08, building:0.04, curious:0.02, focused:0.18 };

const FIRST_NAMES=["Anya","Maya","Kavi","Jin","Sana","Luca","Rina","Cyrus","Noor","Theo","Mira","Dev","Yuki","Omar","Lena","Ravi","Iris","Soren","Aria","Kofi","Nadia","Eli","Priya","Bo","Lina","Hana","Zane","Ines","Tariq","Vera","Mateo","Asha","Niko","Suki","Reza","Cleo","Maja","Jules","Imani","Dario","Liv","Arjun","Faye","Oskar","Nayeli","Kian","Petra","Sami","Wren","Yara"];
const LAST_NAMES=["Reyes","Okafor","Lindqvist","Nakamura","Haddad","Moreau","Singh","Costa","Bauer","Ferreira","Novak","Abara","Voss","Mensah","Ortega","Rahimi","Sato","Klein","Duarte","Petrov","Almeida","Yusuf","Berg","Kapoor"];
const ROLES=["designer","engineer","founder","researcher","writer","architect","PhD · neuro","artist","product","robotics","biologist","composer","filmmaker","mathematician","ceramicist","investor","physicist","editor"];
const TAGS=["tools-for-thought","robotics","generative","type-design","climate","neuro","first time here","spatial computing","ceramics","open-source","hardware","writing","music","synthetic-bio","film","urbanism","AI","ethics"];
const STATUS_BY_MOOD={
  social:["here now","wants energy","let's talk","coffee?","around the table"],
  open:["available","open to chat","say hi","easy to find","here, open"],
  building:["building","deep in a build","shipping today","heads-down · ok to wave","in flow"],
  curious:["exploring","wandering","looking around","between thoughts","curious"],
  focused:["focused","writing","do not disturb","in the zone","quiet"],
};
const OPEN_TO_BY_MOOD={
  social:["a table of people","an impromptu dinner","energy"],
  open:["a coffee","a quick intro","trading notes","a walk-and-talk"],
  building:["a collaborator","feedback on a prototype","a co-founder chat"],
  curious:["a tangent","a new idea","being shown something"],
  focused:["a quiet co-work","async only","later, not now"],
};

function mulberry32(a){return function(){a|=0;a=(a+0x6D2B79F5)|0;let t=Math.imul(a^(a>>>15),1|a);t=(t+Math.imul(t^(t>>>7),61|t))^t;return((t^(t>>>14))>>>0)/4294967296;};}
function pick(rng,arr){return arr[Math.floor(rng()*arr.length)];}
function weightedMood(rng){let r=rng();for(const m of ROOM_MOODS){r-=MOOD_MIX[m.key];if(r<=0)return m.key;}return"open";}

function generateRoom(n, seed=7){
  const rng=mulberry32(seed*2654435761+n);
  const people=[];
  for(let i=0;i<n;i++){
    const moodKey=weightedMood(rng);
    const m=MOOD_BY_KEY[moodKey];
    const importance=rng()<0.05?1:0;
    // proximity: 0=close friend, 1=distant stranger
    const prox=Math.min(0.97,Math.max(0.03, rng()*0.72+0.14+PROXIMITY_BIAS[moodKey]));
    people.push({
      id:i, mood:moodKey, color:m.color,
      size: m.size*(0.80+rng()*0.40)*(importance?1.5:1),
      seed: rng(), importance,
      proximity: prox,
      name:  pick(rng,FIRST_NAMES), last:  pick(rng,LAST_NAMES),
      role:  pick(rng,ROLES),       status:pick(rng,STATUS_BY_MOOD[moodKey]),
      openTo:pick(rng,OPEN_TO_BY_MOOD[moodKey]),
      tags:  [pick(rng,TAGS),pick(rng,TAGS)].filter((v,idx,a)=>a.indexOf(v)===idx),
      mutual:rng()<0.12,
    });
  }
  const counts={};
  for(const m of ROOM_MOODS) counts[m.key]=0;
  for(const p of people) counts[p.mood]++;
  const openToTalk=people.filter(p=>p.mood==="open"||p.mood==="social").length;
  const mutual=people.filter(p=>p.mutual).length;
  return {people,counts,openToTalk,mutual};
}

Object.assign(window,{ROOM_MOODS,MOOD_BY_KEY,generateRoom});
