// ============ MOCK DATA — Smart Tiguemi (faithful to web/src/mocks/fixtures) ============
const ORG = { id: "org_atlas", name: "Lindenhain Suites", city: "Marrakech" };

const BUILDINGS = [
  { id: "b_medina", name: "Riad Médina", area: "Médina" },
  { id: "b_gueliz", name: "Résidence Guéliz", area: "Guéliz" },
];

// units (zones) — a rental "logement"
const UNITS = [
  { id: "u201", name: "Studio 201", building: "b_medina", floor: 2, status: "occupé", guest: "M. Lefèvre", checkout: "Départ 11:00" },
  { id: "u202", name: "Studio 202", building: "b_medina", floor: 2, status: "vacant", guest: null, checkout: "Libre" },
  { id: "u305", name: "Suite 305", building: "b_medina", floor: 3, status: "arrivée", guest: "Famille Roux", checkout: "Arrivée 15:00" },
  { id: "u306", name: "Suite 306", building: "b_medina", floor: 3, status: "occupé", guest: "Mme Haddad", checkout: "Départ demain" },
  { id: "u102", name: "Patio 102", building: "b_medina", floor: 1, status: "occupé", guest: "M. Tanaka", checkout: "Départ 12:00" },
  { id: "g11", name: "Appart G11", building: "b_gueliz", floor: 1, status: "occupé", guest: "Mlle Costa", checkout: "Départ 11:00" },
  { id: "g12", name: "Appart G12", building: "b_gueliz", floor: 1, status: "vacant", guest: null, checkout: "Libre" },
  { id: "g23", name: "Appart G23", building: "b_gueliz", floor: 2, status: "arrivée", guest: "M. & Mme Bauer", checkout: "Arrivée 16:30" },
  { id: "g24", name: "Appart G24", building: "b_gueliz", floor: 2, status: "maintenance", guest: null, checkout: "Maintenance" },
];

const MODES = [
  { id: "cool", label: "Froid", icon: "snow" },
  { id: "heat", label: "Chaud", icon: "flame" },
  { id: "auto", label: "Auto", icon: "auto" },
  { id: "fan",  label: "Ventil.", icon: "fan" },
  { id: "dry",  label: "Sec",  icon: "drop" },
];
const FANS = [
  { id: "auto", label: "Auto" },
  { id: "low",  label: "Min" },
  { id: "med",  label: "Moy" },
  { id: "high", label: "Max" },
];

// 11 devices across units (some units have 2)
let _seed = 7;
function rng() { _seed = (_seed * 1103515245 + 12345) & 0x7fffffff; return _seed / 0x7fffffff; }

const DEVICES = [
  { id: "d1",  name: "Clim — Séjour",   mqtt: "AC-MED-201-A", unit: "u201", online: true,  power: true,  temp: 22, target: 22, mode: "cool", fan: "auto", hum: 48, watt: 820 },
  { id: "d2",  name: "Clim — Chambre",  mqtt: "AC-MED-201-B", unit: "u201", online: true,  power: true,  temp: 23, target: 23, mode: "cool", fan: "low",  hum: 50, watt: 610 },
  { id: "d3",  name: "Clim — Studio",   mqtt: "AC-MED-202-A", unit: "u202", online: true,  power: false, temp: 28, target: 24, mode: "cool", fan: "auto", hum: 55, watt: 0 },
  { id: "d4",  name: "Clim — Salon",    mqtt: "AC-MED-305-A", unit: "u305", online: true,  power: true,  temp: 24, target: 23, mode: "heat", fan: "med",  hum: 44, watt: 1150 },
  { id: "d5",  name: "Clim — Chambre",  mqtt: "AC-MED-305-B", unit: "u305", online: true,  power: true,  temp: 24, target: 24, mode: "heat", fan: "auto", hum: 45, watt: 980 },
  { id: "d6",  name: "Clim — Suite",    mqtt: "AC-MED-306-A", unit: "u306", online: true,  power: true,  temp: 23, target: 23, mode: "auto", fan: "auto", hum: 47, watt: 540 },
  { id: "d7",  name: "Clim — Patio",    mqtt: "AC-MED-102-A", unit: "u102", online: true,  power: true,  temp: 23, target: 22, mode: "cool", fan: "high", hum: 52, watt: 1040 },
  { id: "d8",  name: "Clim — Séjour",   mqtt: "AC-GUE-G11-A", unit: "g11", online: true,  power: true,  temp: 22, target: 22, mode: "cool", fan: "auto", hum: 49, watt: 760 },
  { id: "d9",  name: "Clim — Studio",   mqtt: "AC-GUE-G12-A", unit: "g12", online: false, power: false, temp: 27, target: 24, mode: "cool", fan: "auto", hum: 58, watt: 0 },
  { id: "d10", name: "Clim — Séjour",   mqtt: "AC-GUE-G23-A", unit: "g23", online: true,  power: false, temp: 26, target: 23, mode: "cool", fan: "auto", hum: 53, watt: 0 },
  { id: "d11", name: "Clim — Appart",   mqtt: "AC-GUE-G24-A", unit: "g24", online: false, power: false, temp: 25, target: 24, mode: "cool", fan: "auto", hum: 51, watt: 0 },
];

const SCHEDULES = [
  { id: "s1", name: "Pré-climatisation arrivées", cron: "0 14 * * *", time: "14:00", action: { power: true, mode: "cool", target: 22 }, units: ["u305", "g23"], enabled: true, days: "Tous les jours" },
  { id: "s2", name: "Coupure après départ",       cron: "30 11 * * *", time: "11:30", action: { power: false }, units: ["u201", "u102", "g11"], enabled: true, days: "Tous les jours" },
  { id: "s3", name: "Nuit — éco",                  cron: "0 23 * * *", time: "23:00", action: { power: true, mode: "auto", target: 25 }, units: ["u306"], enabled: true, days: "Lun–Dim" },
  { id: "s4", name: "Chauffe matin (hiver)",       cron: "0 7 * * 1-5", time: "07:00", action: { power: true, mode: "heat", target: 23 }, units: ["u305"], enabled: false, days: "Lun–Ven" },
];

const USERS = {
  admin:  { id: "u_admin", name: "Anna Schneider", role: "Gestionnaire", email: "anna@lindenhain-suites.example", isAdmin: true,  initials: "AS" },
  client: { id: "u_team",  name: "Lukas Becker",  role: "Équipe terrain", email: "lukas@lindenhain-suites.example", isAdmin: false, initials: "LB" },
};

// 24h telemetry generator (temp + humidity) per device
function telemetryFor(device) {
  const pts = [];
  const base = device.target || 23;
  for (let h = 0; h < 24; h++) {
    const drift = Math.sin((h - 6) / 24 * Math.PI * 2) * 2.2;
    const noise = (rng() - 0.5) * 0.8;
    pts.push({
      h,
      label: String(h).padStart(2, "0") + "h",
      temp: +(base + drift + noise).toFixed(1),
      hum: Math.round(46 + Math.sin(h / 24 * Math.PI * 2) * 8 + (rng() - 0.5) * 4),
    });
  }
  return pts;
}

const STATUS_TONE = {
  "occupé": "ok", "arrivée": "accent", "vacant": "muted", "maintenance": "warn",
};

window.STData = {
  ORG, BUILDINGS, UNITS, DEVICES, MODES, FANS, SCHEDULES, USERS,
  telemetryFor, STATUS_TONE,
  unitById: (id) => UNITS.find(u => u.id === id),
  buildingById: (id) => BUILDINGS.find(b => b.id === id),
  devicesForUnit: (id) => DEVICES.filter(d => d.unit === id),
  modeLabel: (id) => (MODES.find(m => m.id === id) || {}).label || id,
  fanLabel: (id) => (FANS.find(f => f.id === id) || {}).label || id,
};
