// agilEspresso — Agile Olgunluk Anketi (Maturity Assessment)
// 5 boyut × 3 soru, 1-5 Likert skala, sonuç: koruyun / geliştirin / acil

const MATURITY_DIMENSIONS = [
  {
    id: 'transparency',
    name: 'Şeffaflık & Geri Bildirim',
    desc: 'Takımının sorunları erken söylemesi, yanlış sinyalleri cezalandırmaması.',
    hue: 35,
    questions: [
      { q: 'Takımımızda "kötü haberi erken vermek" bir erdemdir, cezalandırılmaz.', weight: 1 },
      { q: 'Retrospective\'lerde gerçek sorunları konuşabiliyoruz, tiyatro yapmıyoruz.', weight: 1 },
      { q: 'Sprint Review\'larda gerçek ürünü gösteriyoruz, sadece slayt değil.', weight: 1 }
    ]
  },
  {
    id: 'delivery',
    name: 'Teslimat & Iterasyon',
    desc: 'Değeri küçük parçalar halinde sık sık teslim edebilme kasları.',
    hue: 25,
    questions: [
      { q: 'Her sprint sonunda canlıya çıkabilecek, demo edilebilir bir çıktımız oluyor.', weight: 1 },
      { q: 'MVP\'yi "eksik ürün" değil, "öğrenme için en küçük versiyon" olarak tanımlıyoruz.', weight: 1 },
      { q: 'Büyük özellikleri 2 haftadan kısa teslim edilebilir parçalara bölebiliyoruz.', weight: 1 }
    ]
  },
  {
    id: 'flow',
    name: 'Akış & WIP Disiplini',
    desc: 'Aynı anda başlayan iş sayısını kontrol etme, bitirmeye odaklanma.',
    hue: 200,
    questions: [
      { q: 'Kanban/Scrum tahtamızda WIP limitleri var ve bunlara uyuyoruz.', weight: 1 },
      { q: 'Yeni iş başlatmaktansa mevcut işi bitirmeye öncelik veriyoruz.', weight: 1 },
      { q: 'Context switching\'in maliyetini biliyor ve en aza indiriyoruz.', weight: 1 }
    ]
  },
  {
    id: 'decision',
    name: 'Karar & Özerklik',
    desc: 'Takımın kendi kararlarını verebilmesi, onay zincirlerinin kısa olması.',
    hue: 280,
    questions: [
      { q: 'Takım, günlük işler için yöneticiden onay beklemeden karar verebiliyor.', weight: 1 },
      { q: '%70 bilgi ile karar verip iterasyonla düzeltme kültürümüz var.', weight: 1 },
      { q: 'Two-way door kararlarda hızlı, one-way door\'larda yavaşız — farkı biliyoruz.', weight: 1 }
    ]
  },
  {
    id: 'learning',
    name: 'Öğrenme & AI Kullanımı',
    desc: 'Geliştirme araçlarını ve AI\'ı iş akışına sistemli entegre etme.',
    hue: 160,
    questions: [
      { q: 'AI araçlarını günlük işlerimizde (kod, yazı, araştırma) aktif kullanıyoruz.', weight: 1 },
      { q: 'Retrospective aksiyonlarının bir sonraki sprint\'te takibi yapılıyor.', weight: 1 },
      { q: 'Yeni yöntemleri deneyip işe yaramazsa geri dönmekten çekinmiyoruz.', weight: 1 }
    ]
  }
];

// Her boyut için ipuçları: skor aralığına göre öneriler
const MATURITY_TIPS = {
  transparency: {
    high: [
      'Psikolojik güveni ölçüp düzenli paylaş (nabız anketleri).',
      'Kötü haberi erken veren ekip üyelerini görünür şekilde takdir et.',
      'Retro aksiyonlarını herkese açık bir boardda takip et.'
    ],
    mid: [
      'Retrospective\'lerde yöneticiyi bazı turlarda odadan çıkar.',
      'Sprint Review\'da gerçek kullanıcı geri bildirimini göster, iç demo yeterli değil.',
      'Statü rengini (red/yellow/green) kimin değiştireceğini netleştir.'
    ],
    low: [
      'Önce güvenli bir alan kur: "bu toplantıda söylenen burada kalır" kuralı.',
      'Hata yapmayı değil, hata gizlemeyi cezalandır — bu ayrımı ekibe açıkça söyle.',
      'İlk hedef: sprint başında 3 gerçek risk listesi çıkar.'
    ]
  },
  delivery: {
    high: [
      'Continuous Delivery\'ye geç — haftalık yerine günlük canlıya çıkış.',
      'Feature flag ile dağıtım ve sürüm kararını birbirinden ayır.',
      'Değer akışını (value stream) ölç: fikirden canlıya kaç gün?'
    ],
    mid: [
      'Story\'leri 3 günden küçük parçalara böl — kafana takılan INVEST kriterlerini uygula.',
      'Sprint hedefini tek cümleye indir; madde listesine izin verme.',
      'Demo edilemeyen iş "done" olamaz — DoD\'a bunu ekle.'
    ],
    low: [
      'Önce bir sprintte teslim edilebilir 1 şey çıkar; sayıyı zamanla artır.',
      'Kniberg\'in kaykay-araba çizimini takımla birlikte çalış.',
      'Büyük özelliği parçalamak için user story mapping yap.'
    ]
  },
  flow: {
    high: [
      'CFD (Cumulative Flow Diagram) ile darboğazları haftada bir gözden geçir.',
      'Lead time dağılımını ölç, uzun kuyrukta bekleyen işleri avla.',
      'Takım içi uzmanlık siloları varsa pair/mob çalışma ile dağıt.'
    ],
    mid: [
      'Kanban tahtana üst WIP limiti koy; limit dolunca yeni iş yasak.',
      'Her kişinin aynı anda en fazla 2 işte olması kuralı dene.',
      'Engelleri 24 saat içinde eskale et — yoksa kuyruk büyür.'
    ],
    low: [
      'Önce tahtayı şeffaflaştır: tüm aktif işler görünür olsun.',
      'WIP\'i say: kişi başına 3+ iş varsa uyarı verir bir gösterge koy.',
      'Little\'s Law\'u anlat: WIP/throughput = lead time. Basit ama değiştirici.'
    ]
  },
  decision: {
    high: [
      'Decision log tut — kimin hangi kararı hangi bilgiyle verdiğini yaz.',
      'Advice process\'i dene: karar veren kişi ilgili uzmanlara sorar, onay beklemez.',
      'Senior\'lar koç moduna geç; junior\'lar kararı sahiplensin.'
    ],
    mid: [
      'Karar matrisi çıkar: hangi kararlar takımın, hangisi yöneticinin?',
      'One-way vs two-way door ayrımını haftalık kullan.',
      'Onay beklenen toplantıları ölç, 30 dakikadan uzun olanlara hayır de.'
    ],
    low: [
      'En sık soran "onay alır mıyım?" sorularını listele; en az 3\'ünü takıma devret.',
      'Haftalık 1 karar, yönetici olmadan alınsın ve sonucu paylaşılsın.',
      'Onay kuyruğunu lead time\'a dahil et — maliyeti görünür olsun.'
    ]
  },
  learning: {
    high: [
      'AI ile iş akışında hangi adımlar otomatikleşti, hangileri kalmalı — haritala.',
      'Öğrenme sprint\'i (hack week) kurumsallaştır: çeyrekte 1 hafta.',
      'İç bilgi tabanını AI ile aranabilir yap; kurum hafızası kişiye bağlı kalmasın.'
    ],
    mid: [
      'Her takım üyesi haftada 1 deney paylaşsın (AI prompt, yeni araç, vs).',
      'Retro aksiyonlarını sprint planning\'in ilk 10 dakikasında gözden geçir.',
      'AI çıktılarını code review gibi gözden geçir — kopyala-yapıştır tehlikeli.'
    ],
    low: [
      'Ekibe AI araçları için erişim ve eğitim sağla — yoksa düşük olmak normaldir.',
      'Bir sonraki retro\'da çıkan aksiyonu yazılı bir sahibe bağla.',
      '"Başarısız deneyler" için bir kanal aç: öğrenme olmazsa olgunluk yoktur.'
    ]
  }
};

Object.assign(window, { MATURITY_DIMENSIONS, MATURITY_TIPS });
