// users-data.jsx — Demo kullanıcı kimlikleri (Faz 2 — çoklu rol / oturum prototipi)
// Gerçek uygulamada bu kullanıcılar Microsoft SSO / LDAP'tan gelecek. Prototipte giriş
// ekranında "kimliğinizle giriş yapın" ile seçilir; seçilen kişinin rolüne (user.roles)
// göre açılış sayfası belirlenir (talep eden → katalog, onaycı → onay kutusu).
// Bu, gerçek SSO'ya geçişte atılmayacak mantıktır: yalnızca "kimlik seçici" yerine
// SSO girişi gelir, rol→sayfa yönlendirmesi aynen kalır.
const DEMO_USERS = [
  {
    id: 'u-ayse', name: 'Ayşe Kaya', initials: 'AK',
    position: 'Kıdemli Finansal Analist',
    department: 'Finans · Raporlama & Analiz',
    email: 'ayse.kaya@sirket.com',
    roles: { it: ['requester'], admin: ['requester'] },   // hem IT hem İdari İşler'de talep eder (modül seçici görünür)
    roleLabel: 'Talep Eden',
    phone: '+90 (532) 111 22 33',
    source: 'local',             // 'local' | 'ad' — local kullanıcı profilini düzenleyebilir (yönetici onaylı), AD pasif
    managerId: 'u-mehmet',       // bağlı olduğu yönetici (onay zincirinde "Yöneticim")
    managerSource: 'manual',     // 'ad' | 'manual' — AD bağlanınca otomatik 'ad' dolar
  },
  {
    id: 'u-mehmet', name: 'Mehmet Demir', initials: 'MD',
    position: 'Departman Müdürü · IT',
    department: 'IT',
    email: 'mehmet.demir@sirket.com',
    // Yönetici hem ONAYCI hem TALEP EDEN: ekibinin taleplerini onaylar, kendisi de
    // katalogdan talep oluşturup ÜST kademesine gönderebilir. Kendi talebini onaylayamaz
    // (görevler ayrılığı) — onay zinciri talebi oluşturana göreli olduğu için Mehmet'in
    // talebi otomatik bir üst kademeden (Dep. Direktörü/Üst Yönetim) başlar.
    roles: { it: ['approver', 'requester'] },
    roleLabel: 'Yönetici · Onaycı',
    phone: '+90 (533) 222 33 44',
    source: 'local',
    approverStage: 'mgr',   // onay zincirinde temsil ettiği adım (ilk onay)
    managerId: 'u-ferhat',  // Mehmet'in yöneticisi Ferhat → zincir yukarı akar
    managerSource: 'manual',
  },
  {
    id: 'u-satinalma', name: 'Kerem Aksu', initials: 'KA',
    position: 'Satınalma Uzmanı',
    department: 'Satınalma',
    email: 'kerem.aksu@sirket.com',
    roles: { it: ['purchaser'] },        // zincirin sonunda siparişi oluşturur
    roleLabel: 'Satınalma',
    phone: '+90 (535) 444 55 66',
    source: 'local',
    managerId: 'u-ferhat',               // tedarikçi kartı değişiklikleri + profil düzenlemesi yönetici onayına düşer
    managerSource: 'manual',
  },
  {
    id: 'u-ferhat', name: 'Ferhat YILDIZ', initials: 'FY',
    position: 'Sistem Yöneticisi',
    department: 'BT / Sistem',
    email: 'ferhat.yildiz@sirket.com',
    // Süper Admin: tüm modüllerde tam yetki + sistem ayarları (LDAP, raporlar, katalog,
    // kullanıcı/rol yönetimi). Gerçek uygulamada SUPER_ADMIN AD grubundan gelir.
    roles: { it: ['module_admin'] },
    superAdmin: true,
    roleLabel: 'Süper Admin',
    phone: '+90 (537) 666 77 88',
    source: 'ad',   // AD'den senkronize → profil alanları düzenlenemez (pasif)
  },
];

// Kullanıcının açılış (home) sayfası — rolüne göre. can.* yardımcıları catalog-data.jsx'te.
const hasItRole = (user, role) => !!(user && user.roles && (user.roles.it || []).includes(role));
const isPurchaser = (user) => hasItRole(user, 'purchaser');
function homePageFor(user) {
  if (!user) return 'catalog';
  if (user.superAdmin) return 'admin';
  if (isPurchaser(user)) return 'purchasing';
  if (window.can && window.can.approve(user, 'it')) return 'approvals';
  return 'catalog';
}
const isSuperAdmin = (user) => !!(user && user.superAdmin);

// Bir sonraki onay makamı: mevcut onaycının yöneticisi; yoksa (tepe) Satınalma kullanıcısı.
// Döner: { id, stage: 'approval' | 'purchasing' } veya null.
function nextApprover(currentApproverId) {
  const users = window.DEMO_USERS || [];
  const cur = users.find((u) => u.id === currentApproverId);
  if (cur && cur.managerId && users.find((u) => u.id === cur.managerId)) {
    return { id: cur.managerId, stage: 'approval' };
  }
  const pur = users.find((u) => (u.roles && u.roles.it || []).includes('purchaser') && u.active !== false);
  return pur ? { id: pur.id, stage: 'purchasing' } : null;
}

// Kullanıcının rollerinden okunabilir etiket (login seçici alt yazısı, admin liste vb.)
function roleLabelFor(user) {
  if (!user) return '';
  if (user.superAdmin) return 'Süper Admin';
  const roles = (user.roles && user.roles.it) || [];
  const R = window.ROLES || {};
  const labels = roles.map((r) => (R[r] ? R[r].label : r));
  return labels.join(' · ') || 'Talep Eden';
}

// Kategori-bazlı yetki (Faz 3.4): kullanıcının görebileceği kategori grup id'leri.
// null = kısıt yok (tüm kategoriler). Boş değilse yalnızca o gruplar.
function allowedGroupIds(user) {
  if (!user || !Array.isArray(user.allowedCategories) || user.allowedCategories.length === 0) return null;
  return user.allowedCategories;
}

// Modül-bazlı kategori izni (Faz 5.2b): kullanıcının BU MODÜLDE görebileceği kategori id'leri.
// Kural: kullanıcının izinli kategorilerinden bu modüle ait olanlar varsa yalnız onlar;
// bu modüle ait HİÇ kısıt yoksa → null (modülün TÜMÜ görünür). Çok-modüllü kullanıcı için
// "IT'de kısıtlı ama İdari'de serbest" gibi durumları doğru kurar.
function allowedGroupIdsInModule(user, moduleId) {
  const mid = moduleId || (window.ACTIVE_MODULE || 'it');
  const allowed = (user && Array.isArray(user.allowedCategories)) ? user.allowedCategories : [];
  if (!allowed.length) return null;
  const all = window.CATALOG_CATEGORIES || [];
  const modCatIds = all.filter((g) => (g.module || 'it') === mid).map((g) => g.id);
  const inMod = allowed.filter((id) => modCatIds.includes(id));
  return inMod.length ? inMod : null;
}

Object.assign(window, { DEMO_USERS, homePageFor, isSuperAdmin, isPurchaser, nextApprover, roleLabelFor, allowedGroupIds, allowedGroupIdsInModule });
