/* ============================================================
   SAYRU — product.jsx
   Sayru-Yön ürün tanıtımı (Sayru-Yon sayfasındaki platform bölümü)
   ve ayrı Ahtapot modül sayfası. Metinler Sayru-Yön Site / Ahtapot Site
   dokümanlarından; görseller assets/urun/ altında gerçek ürün ekranları.
   ============================================================ */

const URUN = 'assets/urun/';

const PI = {
  check: <path d="M5 12.5l4.2 4.2L19 7" />,
  arrow: <path d="M5 12h14M13 6l6 6-6 6" />,
  box: <g><path d="M21 8l-9-5-9 5 9 5 9-5z" /><path d="M3 8v8l9 5 9-5V8" /><path d="M12 13v8" /></g>,
  flow: <g><rect x="3" y="3" width="6" height="6" rx="1.5" /><rect x="15" y="15" width="6" height="6" rx="1.5" /><path d="M9 6h4a3 3 0 013 3v6" /></g>,
  shield: <g><path d="M12 3l7 2.5v5c0 5-3.3 8-7 9.5-3.7-1.5-7-4.5-7-9.5v-5z" /><path d="M9 12l2.2 2.2L15.4 10" /></g>,
  doc: <g><path d="M14 3H7a2 2 0 00-2 2v14a2 2 0 002 2h10a2 2 0 002-2V8z" /><path d="M14 3v5h5M9 13h6M9 17h6" /></g>,
  chart: <g><path d="M4 20V10M10 20V4M16 20v-7M22 20H2" /></g>,
  clock: <g><circle cx="12" cy="12" r="9" /><path d="M12 7v5l3 2" /></g>,
  target: <g><circle cx="12" cy="12" r="9" /><circle cx="12" cy="12" r="5" /><circle cx="12" cy="12" r="1" /></g>,
  user: <g><circle cx="12" cy="8" r="4" /><path d="M4 21a8 8 0 0116 0" /></g>,
  key: <g><circle cx="8" cy="15" r="4" /><path d="M11 12l9-9M17 6l3 3" /></g>,
  data: <g><ellipse cx="12" cy="5" rx="8" ry="3" /><path d="M4 5v6c0 1.7 3.6 3 8 3s8-1.3 8-3V5M4 11v6c0 1.7 3.6 3 8 3s8-1.3 8-3v-6" /></g>,
  bug: <g><rect x="7" y="8" width="10" height="12" rx="5" /><path d="M12 8V5M9 5l-2-2M15 5l2-2M3 13h4M17 13h4M4 19l3-2M20 19l-3-2" /></g>,
  apps: <g><rect x="3" y="3" width="7" height="7" rx="1.5" /><rect x="14" y="3" width="7" height="7" rx="1.5" /><rect x="3" y="14" width="7" height="7" rx="1.5" /><rect x="14" y="14" width="7" height="7" rx="1.5" /></g>,
  list: <g><path d="M9 6h12M9 12h12M9 18h12" /><path d="M4 6l1 1 2-2M4 12l1 1 2-2M4 18l1 1 2-2" /></g>,
  sync: <g><path d="M4 12a8 8 0 0114-5.3L20 9M20 12a8 8 0 01-14 5.3L4 15" /><path d="M20 4v5h-5M4 20v-5h5" /></g>,
  pc: <g><rect x="3" y="4" width="18" height="12" rx="2" /><path d="M8 20h8M12 16v4" /></g>,
  mail: <g><rect x="3" y="5" width="18" height="14" rx="2" /><path d="M4 7l8 6 8-6" /></g>,
  zoom: <g><circle cx="11" cy="11" r="7" /><path d="M20 20l-4-4M11 8v6M8 11h6" /></g>,
};
function PIcon({ name, size = 20 }) {
  return <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="1.7" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">{PI[name] || PI.check}</svg>;
}

/* Tıklayınca büyüyen ekran görüntüsü. slot verilirse Yönetim → Görseller'den atanan görsel ve
   yazılan alt bilgi kullanılır; atanmamışsa assets/urun/ altındaki varsayılan görsel gösterilir. */
function prodImg(slot, src, alt, lang) {
  const a = slot && typeof cmsSlotImages === 'function' ? cmsSlotImages(slot)[0] : null;
  const cap = slot && typeof cmsCaption === 'function' ? cmsCaption(slot, alt, lang) : alt;
  return { url: a ? (a.largeUrl || a.url) : URUN + src, cap };
}
function Shot({ slot, src, alt, className, caption }) {
  const { lang } = useT();
  const [open, setOpen] = useState(false);
  const im = prodImg(slot, src, alt, lang);
  useEffect(() => {
    if (!open) return;
    const k = (e) => { if (e.key === 'Escape') setOpen(false); };
    window.addEventListener('keydown', k);
    return () => window.removeEventListener('keydown', k);
  }, [open]);
  return (
    <React.Fragment>
      <button type="button" className={'pshot ' + (className || '')} onClick={() => setOpen(true)} aria-label={im.cap}>
        <span className="pshot__bar"><i></i><i></i><i></i></span>
        <img src={im.url} alt={im.cap} loading="lazy" />
        <span className="pshot__zoom"><PIcon name="zoom" size={18} /></span>
      </button>
      {caption && <div className="mono pshot__cap">{im.cap}</div>}
      {open && (
        <div className="plight" role="dialog" aria-label={im.cap} onClick={() => setOpen(false)}>
          <img src={im.url} alt={im.cap} />
          <span className="plight__cap">{im.cap}</span>
        </div>
      )}
    </React.Fragment>
  );
}

/* ------------------------------------------------------------ Çok dilli metinler (TR / EN / AZ) */
const tx = (o, lang) => (o && typeof o === 'object' && !Array.isArray(o)) ? (o[lang] || o.tr) : o;
const P = {
  overview: { tr: 'Genel Bakış', en: 'Overview', az: 'Ümumi Baxış' },
  platform: { tr: 'Sayru-Yön BT Yönetişim ve Uyum Platformu', en: 'Sayru-Yön IT Governance and Compliance Platform', az: 'Sayru-Yön İT İdarəetmə və Uyğunluq Platforması' },
  slogan: { tr: 'BT operasyonlarınızı yönetin. Kontrollerinizi otomatikleştirin. Risklerinizi görünür kılın. Denetime her zaman hazır olun.',
    en: 'Manage your IT operations. Automate your controls. Make your risks visible. Be audit-ready at all times.',
    az: 'İT əməliyyatlarınızı idarə edin. Nəzarətlərinizi avtomatlaşdırın. Risklərinizi görünən edin. Auditə hər zaman hazır olun.' },
  introP1: { tr: "Sayru-Yön, Sayru Teknoloji Danışmanlık Tic. Ltd. Şti. tarafından geliştirilen, GLPI 11 ve GLPI 12 üzerinde çalışan bütünleşik bir BT Yönetişim ve Uyum Platformudur. GLPI'ın güçlü varlık ve hizmet yönetimi altyapısını; onay mekanizmaları, risk yönetimi, veri kalitesi, doküman yönetimi, otomatik kontrol süreçleri ve denetlenebilir kayıtlarla genişletir.",
    en: "Sayru-Yön, developed by Sayru Teknoloji Danışmanlık Tic. Ltd. Şti., is an integrated IT Governance and Compliance Platform running on GLPI 11 and GLPI 12. It extends GLPI's powerful asset and service management foundation with approval mechanisms, risk management, data quality, document management, automated control processes and auditable records.",
    az: 'Sayru Teknoloji Danışmanlık Tic. Ltd. Şti. tərəfindən hazırlanmış Sayru-Yön, GLPI 11 və GLPI 12 üzərində işləyən inteqrasiya olunmuş İT İdarəetmə və Uyğunluq Platformasıdır. GLPI-nin güclü aktiv və xidmət idarəetməsi infrastrukturunu təsdiq mexanizmləri, risk idarəetməsi, məlumat keyfiyyəti, sənəd idarəetməsi, avtomatik nəzarət prosesləri və yoxlanıla bilən qeydlərlə genişləndirir.' },
  introP2: { tr: 'Bilgi varlıklarından operasyonel süreçlere, risk değerlendirmelerinden doküman onaylarına kadar farklı faaliyetleri ortak bir platformda bir araya getirir. Kurumların BT süreçlerini yalnızca kayıt altına almalarını değil, bu süreçleri tanımlı kontrol gereksinimleri doğrultusunda yürütmelerini ve sonuçlarını izlemelerini destekler.',
    en: 'It brings activities ranging from information assets to operational processes, and from risk assessments to document approvals, together on a single platform. It helps organizations not only record their IT processes but also run them in line with defined control requirements and monitor the results.',
    az: 'İnformasiya aktivlərindən əməliyyat proseslərinə, risk qiymətləndirmələrindən sənəd təsdiqlərinə qədər müxtəlif fəaliyyətləri vahid platformada birləşdirir. Qurumlara İT proseslərini yalnız qeydə almağa deyil, həm də müəyyən edilmiş nəzarət tələblərinə uyğun aparmağa və nəticələrini izləməyə kömək edir.' },
  why: { tr: 'Neden Sayru-Yön?', en: 'Why Sayru-Yön?', az: 'Niyə Sayru-Yön?' },
  whyLead: { tr: 'Geleneksel BT yönetiminde envanterler, risk kayıtları, onaylar, dokümanlar ve kontrol sonuçları farklı araçlarda tutulabilir. Sayru-Yön, bu bilgileri ilişkili ve izlenebilir bir yapıda bir araya getirerek operasyonel kontrolü günlük işleyişin bir parçası haline getirir.',
    en: 'In traditional IT management, inventories, risk registers, approvals, documents and control results may be kept in separate tools. Sayru-Yön brings this information together in a connected, traceable structure and makes operational control part of day-to-day work.',
    az: 'Ənənəvi İT idarəetməsində inventarlar, risk qeydləri, təsdiqlər, sənədlər və nəzarət nəticələri müxtəlif alətlərdə saxlanıla bilər. Sayru-Yön bu məlumatları əlaqəli və izlənə bilən strukturda birləşdirərək əməliyyat nəzarətini gündəlik işin bir hissəsinə çevirir.' },
  modules: { tr: 'Sayru-Yön Modülleri', en: 'Sayru-Yön Modules', az: 'Sayru-Yön Modulları' },
  ahtTab: { tr: 'Ahtapot Modülü', en: 'Ahtapot Module', az: 'Ahtapot Modulu' },
  ahtTabSub: { tr: 'AD, envanter, yazılım uyumu ve zafiyet denetimi', en: 'AD, inventory, software compliance and vulnerability audit', az: 'AD, inventar, proqram uyğunluğu və zəiflik auditi' },
  glpiKick: { tr: 'GLPI ile bütünleşik', en: 'Integrated with GLPI', az: 'GLPI ilə inteqrasiya' },
  glpiTitle: { tr: "GLPI'ın güçlü altyapısı, kurumsal kontrol yetenekleriyle", en: "GLPI's powerful foundation, with enterprise control capabilities", az: 'GLPI-nin güclü infrastrukturu, korporativ nəzarət imkanları ilə' },
  glpiP1: { tr: "Sayru-Yön, GLPI'ın varlık ve hizmet yönetimi yeteneklerinden yararlanır. GLPI Agent ile uç noktalardan bilgi toplanması, SNMP aracılığıyla ağ cihazlarının keşfi ve VMware vCenter gibi sanallaştırma platformlarından envanter bilgilerinin alınması, uygun GLPI yapılandırmalarıyla desteklenebilir.",
    en: "Sayru-Yön builds on GLPI's asset and service management capabilities. With a suitable GLPI configuration, it supports collecting data from endpoints with GLPI Agent, discovering network devices via SNMP and importing inventory from virtualization platforms such as VMware vCenter.",
    az: 'Sayru-Yön GLPI-nin aktiv və xidmət idarəetməsi imkanlarından istifadə edir. Uyğun GLPI konfiqurasiyası ilə GLPI Agent vasitəsilə son nöqtələrdən məlumat toplanması, SNMP ilə şəbəkə cihazlarının aşkarlanması və VMware vCenter kimi virtuallaşdırma platformalarından inventar məlumatlarının alınması dəstəklənir.' },
  glpiP2: { tr: "Arıza, istek, sorun ve değişiklik yönetimi gibi operasyonel süreçler; Sayru-Yön'ün onay, risk, veri kalitesi ve kontrol mekanizmalarıyla birlikte ele alınabilir. ISO/IEC 27001 odaklı örnek kategoriler, şablonlar ve süreçler de kurumsal uyarlamalar için başlangıç noktası sunar.",
    en: "Operational processes such as incident, request, problem and change management can be handled together with Sayru-Yön's approval, risk, data quality and control mechanisms. ISO/IEC 27001-focused sample categories, templates and processes provide a starting point for your own adaptations.",
    az: 'Nasazlıq, sorğu, problem və dəyişiklik idarəetməsi kimi əməliyyat prosesləri Sayru-Yön-ün təsdiq, risk, məlumat keyfiyyəti və nəzarət mexanizmləri ilə birlikdə idarə oluna bilər. ISO/IEC 27001 yönümlü nümunə kateqoriyalar, şablonlar və proseslər korporativ uyğunlaşdırmalar üçün başlanğıc nöqtəsi təqdim edir.' },
  gainsKick: { tr: 'Kurumunuza sağlayacağı katkılar', en: 'What it brings to your organization', az: 'Qurumunuza verəcəyi töhfələr' },
  closeYonT: { tr: 'Proaktif Kontrol. İzlenebilir Operasyon. Ölçülebilir İyileştirme.', en: 'Proactive Control. Traceable Operations. Measurable Improvement.', az: 'Proaktiv Nəzarət. İzlənə bilən Əməliyyat. Ölçülə bilən Təkmilləşmə.' },
  closeYonP: { tr: 'Sayru-Yön ile BT yönetimini yalnızca kayıt tutan bir operasyon olmaktan çıkarın; kontrollerin uygulandığı, sorumlulukların izlendiği, kanıtların ilişkilendirildiği ve iyileştirmelerin takip edildiği bütünleşik bir yönetim yapısına dönüştürün.',
    en: 'Move IT management beyond record-keeping with Sayru-Yön and turn it into an integrated management structure where controls are applied, responsibilities are tracked, evidence is linked and improvements are followed up.',
    az: 'Sayru-Yön ilə İT idarəetməsini yalnız qeyd aparan əməliyyat olmaqdan çıxarın; nəzarətlərin tətbiq edildiyi, məsuliyyətlərin izləndiyi, sübutların əlaqələndirildiyi və təkmilləşdirmələrin izləndiyi inteqrasiya olunmuş idarəetmə strukturuna çevirin.' },
  closeYonAsk: { tr: 'Sayru-Yön hakkında bilgi almak ve kurumunuza uygun kullanım senaryolarını değerlendirmek için bizimle iletişime geçin.',
    en: 'Contact us to learn more about Sayru-Yön and to evaluate the use cases that fit your organization.',
    az: 'Sayru-Yön haqqında məlumat almaq və qurumunuza uyğun istifadə ssenarilərini qiymətləndirmək üçün bizimlə əlaqə saxlayın.' },
  contactBtn: { tr: 'İletişime geçin', en: 'Contact us', az: 'Bizimlə əlaqə' },
  docsKick: { tr: 'Dokümanlar', en: 'Documents', az: 'Sənədlər' },
  docsTitle: { tr: 'Tanıtım dokümanlarını indirin', en: 'Download the product documents', az: 'Tanıtım sənədlərini yükləyin' },
  docsTitleAht: { tr: 'Ahtapot ve Sayru-Yön dokümanlarını indirin', en: 'Download the Ahtapot and Sayru-Yön documents', az: 'Ahtapot və Sayru-Yön sənədlərini yükləyin' },
  docsNote: { tr: 'Dokümanlar Türkçedir.', en: 'Documents are in Turkish.', az: 'Sənədlər türk dilindədir.' },
  download: { tr: 'İndir', en: 'Download', az: 'Yüklə' },
  zoom: { tr: 'büyüt', en: 'enlarge', az: 'böyüt' },
  home: { tr: 'Anasayfa', en: 'Home', az: 'Ana səhifə' },
  ahtTitle: { tr: 'Ahtapot Modülü', en: 'Ahtapot Module', az: 'Ahtapot Modulu' },
  ahtSub: { tr: 'Active Directory, Envanter ve Uç Nokta Güvenliği İçin Proaktif Denetim', en: 'Proactive Audit for Active Directory, Inventory and Endpoint Security', az: 'Active Directory, İnventar və Son Nöqtə Təhlükəsizliyi üçün Proaktiv Audit' },
  ahtSlogan: { tr: 'Farklılıkları tespit edin. Güvenlik açıklarını önceliklendirin. Bulguları aksiyona dönüştürün.', en: 'Detect differences. Prioritize security gaps. Turn findings into action.', az: 'Fərqləri aşkar edin. Təhlükəsizlik boşluqlarını prioritetləşdirin. Tapıntıları tədbirə çevirin.' },
  backYon: { tr: "Sayru-Yön'e dön", en: 'Back to Sayru-Yön', az: 'Sayru-Yön-ə qayıt' },
  ahtP1: { tr: 'Ahtapot, Sayru Teknoloji Danışmanlık Tic. Ltd. Şti. tarafından geliştirilen, Active Directory ile GLPI envanteri arasındaki tutarsızlıkları, uç nokta envanterindeki eksiklikleri, yazılım uyumluluğunu ve güvenlik zafiyetlerini denetlemeye yardımcı olan bir Sayru-Yön modülüdür.',
    en: 'Ahtapot, developed by Sayru Teknoloji Danışmanlık Tic. Ltd. Şti., is a Sayru-Yön module that helps audit inconsistencies between Active Directory and the GLPI inventory, gaps in the endpoint inventory, software compliance and security vulnerabilities.',
    az: 'Sayru Teknoloji Danışmanlık Tic. Ltd. Şti. tərəfindən hazırlanmış Ahtapot, Active Directory ilə GLPI inventarı arasındakı uyğunsuzluqları, son nöqtə inventarındakı çatışmazlıqları, proqram təminatı uyğunluğunu və təhlükəsizlik zəifliklərini yoxlamağa kömək edən Sayru-Yön moduludur.' },
  ahtP2: { tr: 'Bilgisayar hesaplarından envanter ajanlarına, cihaz kimliklerinden kullanıcı zimmetlerine ve kurulu uygulamalardan zafiyet kayıtlarına kadar farklı kontrol alanlarını bir araya getirir. Tespit edilen bulguların manuel veya otomatik destek kayıtlarıyla ilişkilendirilmesini sağlayarak denetim, aksiyon ve iyileştirme süreçlerinin birlikte takip edilmesini destekler.',
    en: 'It brings together different control areas, from computer accounts to inventory agents, from device identities to user assignments, and from installed applications to vulnerability records. By linking detected findings to manual or automatic support tickets, it helps track audit, action and remediation together.',
    az: 'Kompüter hesablarından inventar agentlərinə, cihaz identifikatorlarından istifadəçi təhvillərinə, quraşdırılmış tətbiqlərdən zəiflik qeydlərinə qədər müxtəlif nəzarət sahələrini birləşdirir. Aşkar edilən tapıntıları əl ilə və ya avtomatik yaradılan dəstək sorğuları ilə əlaqələndirərək audit, tədbir və təkmilləşdirmə proseslərinin birgə izlənməsinə kömək edir.' },
  ahtGoal: { tr: "Ahtapot'un amacı yalnızca sorunları listelemek değil, hangi bilgisayarda hangi uyumsuzluğun bulunduğunu ve çözüm sürecinin hangi aşamada olduğunu görünür kılmaktır.",
    en: "Ahtapot's goal is not just to list problems, but to make visible which computer has which non-conformity and what stage the resolution process is at.",
    az: 'Ahtapot-un məqsədi yalnız problemləri sadalamaq deyil, hansı kompüterdə hansı uyğunsuzluğun olduğunu və həll prosesinin hansı mərhələdə olduğunu görünən etməkdir.' },
  ahtChecksKick: { tr: 'Ahtapot neleri denetler?', en: 'What does Ahtapot audit?', az: 'Ahtapot nələri yoxlayır?' },
  ahtChecksTitle: { tr: 'Yedi kontrol alanı, tek denetim yaklaşımı', en: 'Seven control areas, one audit approach', az: 'Yeddi nəzarət sahəsi, vahid audit yanaşması' },
  ahtActKick: { tr: 'Bulgudan aksiyona, aksiyondan iyileştirmeye', en: 'From finding to action, from action to improvement', az: 'Tapıntıdan tədbirə, tədbirdən təkmilləşməyə' },
  ahtActTitle: { tr: 'Devam eden işler ve tamamlanan iyileştirmeler görünür', en: 'Work in progress and completed improvements stay visible', az: 'Davam edən işlər və tamamlanmış təkmilləşdirmələr görünür' },
  ahtActP1: { tr: 'Ahtapot, denetim sonuçlarını operasyonel süreçlerle ilişkilendirir. Tespit edilen uyumsuzluklar için manuel veya otomatik destek kayıtları oluşturulabilir. Bulgular giderildiğinde ilgili kayıtların durumları tanımlı kurallara göre güncellenebilir; birden fazla bulgunun aynı kayıt üzerinden takip edildiği senaryolarda giderilen bulgular ayrıca işlenebilir.',
    en: 'Ahtapot links audit results to operational processes. Manual or automatic support tickets can be created for detected non-conformities. When findings are resolved, the related tickets can be updated according to defined rules; where several findings are tracked on the same ticket, resolved findings can be recorded separately.',
    az: 'Ahtapot audit nəticələrini əməliyyat prosesləri ilə əlaqələndirir. Aşkar edilən uyğunsuzluqlar üçün əl ilə və ya avtomatik dəstək sorğuları yaradıla bilər. Tapıntılar aradan qaldırıldıqda əlaqəli sorğuların vəziyyəti müəyyən qaydalara görə yenilənə bilər; bir neçə tapıntının eyni sorğu üzərindən izləndiyi hallarda aradan qaldırılan tapıntılar ayrıca qeyd edilə bilər.' },
  ahtActP2: { tr: 'Bu yaklaşım, BT ekiplerinin yalnızca mevcut sorunları görmesini değil, devam eden işleri ve tamamlanan iyileştirmeleri de takip etmesini sağlar.',
    en: 'This approach lets IT teams see not only current problems but also follow ongoing work and completed improvements.',
    az: 'Bu yanaşma İT komandalarına yalnız mövcud problemləri görməyə deyil, davam edən işləri və tamamlanmış təkmilləşdirmələri də izləməyə imkan verir.' },
  ahtGainsKick: { tr: 'Ahtapot ile elde edilen kazanımlar', en: 'What you gain with Ahtapot', az: 'Ahtapot ilə əldə edilən faydalar' },
  closeAhtT: { tr: 'Envanterinizi Tanıyın. Uyumsuzlukları Görün. Güvenlik Kontrollerinizi Güçlendirin.', en: 'Know Your Inventory. See Non-Conformities. Strengthen Your Security Controls.', az: 'İnventarınızı Tanıyın. Uyğunsuzluqları Görün. Təhlükəsizlik Nəzarətlərinizi Gücləndirin.' },
  closeAhtP: { tr: 'Ahtapot ile Active Directory, GLPI envanteri, yazılım uyumluluğu ve zafiyet yönetimini ortak bir denetim yaklaşımında bir araya getirin. Farklılıkları görünür kılın, bulguları sorumluların aksiyonlarıyla ilişkilendirin ve uç nokta kontrollerinizi sürekli iyileştirilen bir sürece dönüştürün.',
    en: 'With Ahtapot, bring Active Directory, the GLPI inventory, software compliance and vulnerability management together in one audit approach. Make differences visible, link findings to owners’ actions and turn your endpoint controls into a continuously improving process.',
    az: 'Ahtapot ilə Active Directory, GLPI inventarı, proqram təminatı uyğunluğu və zəiflik idarəetməsini vahid audit yanaşmasında birləşdirin. Fərqləri görünən edin, tapıntıları məsul şəxslərin tədbirləri ilə əlaqələndirin və son nöqtə nəzarətlərinizi daim təkmilləşən prosesə çevirin.' },
  closeAhtAsk: { tr: 'Ahtapot, Sayru-Yön ile BT envanterinizi ve uç nokta kontrollerinizi daha tutarlı, izlenebilir ve yönetilebilir hale getirmenize yardımcı olur.',
    en: 'Together with Sayru-Yön, Ahtapot helps make your IT inventory and endpoint controls more consistent, traceable and manageable.',
    az: 'Ahtapot Sayru-Yön ilə birlikdə İT inventarınızı və son nöqtə nəzarətlərinizi daha ardıcıl, izlənə bilən və idarə oluna bilən etməyə kömək edir.' },
};
const L3 = (tr, en, az) => ({ tr, en, az });

/* ------------------------------------------------------------ Sayru-Yön */

const YON_WHY = [
  ['box', L3('Güvenilir bilgi varlığı envanteri', 'Reliable information asset inventory', 'Etibarlı informasiya aktivləri inventarı'),
    L3('Fiziksel ve mantıksal varlıkları, hizmetleri, süreçleri, uygulamaları, tedarikçileri ve yedekleme ilişkilerini yönetin.', 'Manage physical and logical assets, services, processes, applications, suppliers and backup relationships.', 'Fiziki və məntiqi aktivləri, xidmətləri, prosesləri, tətbiqləri, təchizatçıları və ehtiyat nüsxə əlaqələrini idarə edin.')],
  ['flow', L3('Kontrollü işlem ve onay süreçleri', 'Controlled transactions and approvals', 'Nəzarətli əməliyyat və təsdiq prosesləri'),
    L3('Varlık oluşturma, güncelleme ve değerlendirme işlemlerini ihtiyaca uygun onay akışlarıyla yürütün.', 'Run asset creation, update and assessment operations through approval flows that fit your needs.', 'Aktivlərin yaradılması, yenilənməsi və qiymətləndirilməsi əməliyyatlarını ehtiyaca uyğun təsdiq axınları ilə aparın.')],
  ['data', L3('Sürekli veri kalitesi kontrolü', 'Continuous data quality control', 'Davamlı məlumat keyfiyyəti nəzarəti'),
    L3('Eksik, güncelliğini yitirmiş veya kurallara uymayan kayıtları tespit edin; bulguları ve iyileştirme adımlarını takip edin.', 'Detect missing, outdated or non-compliant records; track findings and remediation steps.', 'Çatışmayan, köhnəlmiş və ya qaydalara uyğun olmayan qeydləri aşkar edin; tapıntıları və təkmilləşdirmə addımlarını izləyin.')],
  ['target', L3('Bütünleşik risk yönetimi', 'Integrated risk management', 'İnteqrasiya olunmuş risk idarəetməsi'),
    L3('Riskleri ilgili varlıklarla ilişkilendirin, risk işleme faaliyetlerini ve sorumlulukları izleyin.', 'Link risks to the related assets and track risk treatment activities and responsibilities.', 'Riskləri əlaqəli aktivlərlə əlaqələndirin, risk emalı fəaliyyətlərini və məsuliyyətləri izləyin.')],
  ['doc', L3('Kontrollü doküman yönetimi', 'Controlled document management', 'Nəzarətli sənəd idarəetməsi'),
    L3('Dokümanları onay, sürüm, yayın, okuma teyidi ve periyodik gözden geçirme süreçleriyle yönetin.', 'Manage documents through approval, versioning, publishing, read acknowledgment and periodic review.', 'Sənədləri təsdiq, versiya, dərc, oxunma təsdiqi və dövri baxış prosesləri ilə idarə edin.')],
  ['clock', L3('Otomatik operasyonel kontroller', 'Automated operational controls', 'Avtomatik əməliyyat nəzarətləri'),
    L3('Periyodik görevleri planlayın, sorumlulara yönlendirin ve sonuçlarını kayıt altına alın.', 'Schedule periodic tasks, route them to owners and record their results.', 'Dövri tapşırıqları planlaşdırın, məsul şəxslərə yönləndirin və nəticələrini qeydə alın.')],
  ['chart', L3('Ölçülebilir yönetişim', 'Measurable governance', 'Ölçülə bilən idarəetmə'),
    L3('Panolar ve zamanlanmış raporlarla operasyonel göstergeleri, riskleri ve kontrol sonuçlarını izleyin.', 'Track operational indicators, risks and control results with dashboards and scheduled reports.', 'Panellər və planlaşdırılmış hesabatlarla əməliyyat göstəricilərini, riskləri və nəzarət nəticələrini izləyin.')],
];

const YON_MODULES = [
  ['flow', L3('Onaylı İşlem ve Denetim İzi Yönetimi', 'Approved Transactions and Audit Trail Management', 'Təsdiqli Əməliyyat və Audit İzi İdarəetməsi'),
    L3('Kritik varlık ve değerlendirme işlemlerini doğrudan işlem, yönetici onayı veya çok aşamalı onay modelleriyle yönetin. İşlem gerekçelerini, onay adımlarını ve geçmiş kayıtlarını izlenebilir hale getirin.', 'Manage critical asset and assessment operations through direct processing, manager approval or multi-stage approval models. Make justifications, approval steps and history traceable.', 'Kritik aktiv və qiymətləndirmə əməliyyatlarını birbaşa icra, rəhbər təsdiqi və ya çoxmərhələli təsdiq modelləri ilə idarə edin. Əsaslandırmaları, təsdiq addımlarını və keçmiş qeydləri izlənə bilən edin.'),
    'envanter-onay.jpg', L3('Envanter Onay: yönetici onayladı, Bilgi Güvenliği onayı bekleniyor', 'Inventory Approval: approved by the manager, awaiting Information Security approval', 'İnventar Təsdiqi: rəhbər təsdiqlədi, İnformasiya Təhlükəsizliyi təsdiqi gözlənilir')],
  ['box', L3('Bilgi Varlıkları ve Bağımlılık Yönetimi', 'Information Assets and Dependency Management', 'İnformasiya Aktivləri və Asılılıq İdarəetməsi'),
    L3('BT varlıklarını; süreç, hizmet, uygulama, tedarikçi ve yedekleme ilişkileriyle birlikte tanımlayın. Gizlilik, bütünlük ve erişilebilirlik değerleri üzerinden varlık sınıflandırmasını ve kritiklik değerlendirmesini destekleyin.', 'Define IT assets together with their process, service, application, supplier and backup relationships. Support asset classification and criticality assessment based on confidentiality, integrity and availability values.', 'İT aktivlərini proses, xidmət, tətbiq, təchizatçı və ehtiyat nüsxə əlaqələri ilə birlikdə müəyyən edin. Məxfilik, bütövlük və əlçatanlıq dəyərləri əsasında aktiv təsnifatını və kritiklik qiymətləndirməsini dəstəkləyin.'),
    'surec.jpg', L3('Süreç Envanteri kaydı ve bağlı modül sekmeleri', 'Process Inventory record with linked module tabs', 'Proses İnventarı qeydi və əlaqəli modul tabları')],
  ['data', L3('Veri Kalitesi', 'Data Quality', 'Məlumat Keyfiyyəti'),
    L3('Zorunlu alanları, sorumluluk bilgilerini, kayıt güncelliğini ve belirlenmiş veri kurallarını kontrol edin. Tespit edilen uyumsuzlukları bulguya ve gerektiğinde destek kaydına dönüştürün.', 'Check mandatory fields, ownership information, record currency and defined data rules. Turn detected non-conformities into findings and, when needed, into support tickets.', 'Məcburi sahələri, məsuliyyət məlumatlarını, qeydlərin aktuallığını və müəyyən edilmiş məlumat qaydalarını yoxlayın. Aşkar edilən uyğunsuzluqları tapıntıya, lazım olduqda isə dəstək sorğusuna çevirin.'),
    'veri-kalitesi.jpg', L3('Veri Kalitesi genel bakış: kalite puanı ve kural bazında sonuçlar', 'Data Quality overview: quality score and results per rule', 'Məlumat Keyfiyyəti icmalı: keyfiyyət balı və qaydalar üzrə nəticələr')],
  ['target', L3('Pusula – Risk Yönetimi', 'Pusula – Risk Management', 'Pusula – Risk İdarəetməsi'),
    L3('Kuruma özgü risk metodolojileri oluşturun. Riskleri değerlendirin, önceliklendirin ve ilgili varlıklarla ilişkilendirin. Risk işleme faaliyetlerini, aksiyonları ve değerlendirme sonuçlarını takip edin.', 'Build risk methodologies specific to your organization. Assess and prioritize risks and link them to the related assets. Track risk treatment activities, actions and assessment results.', 'Quruma xas risk metodologiyaları yaradın. Riskləri qiymətləndirin, prioritetləşdirin və əlaqəli aktivlərlə əlaqələndirin. Risk emalı fəaliyyətlərini, tədbirləri və qiymətləndirmə nəticələrini izləyin.'),
    'pusula-risk.jpg', L3('Pusula risk kaydı: doğal ve artık risk, işleme planı', 'Pusula risk record: inherent and residual risk, treatment plan', 'Pusula risk qeydi: təbii və qalıq risk, emal planı')],
  ['doc', L3('Mühür – Doküman Yönetimi', 'Mühür – Document Management', 'Mühür – Sənəd İdarəetməsi'),
    L3('Politika, prosedür, talimat ve diğer kurumsal dokümanları kontrollü biçimde yönetin. Onay akışlarını, sürüm geçmişini, yayın durumunu, okuma teyitlerini ve periyodik gözden geçirmeleri takip edin.', 'Manage policies, procedures, instructions and other corporate documents in a controlled way. Track approval flows, version history, publishing status, read acknowledgments and periodic reviews.', 'Siyasətləri, prosedurları, təlimatları və digər korporativ sənədləri nəzarətli şəkildə idarə edin. Təsdiq axınlarını, versiya tarixçəsini, dərc vəziyyətini, oxunma təsdiqlərini və dövri baxışları izləyin.'),
    'muhur.jpg', L3('Mühür onay ekranı: iki adımlı onay akışı', 'Mühür approval screen: two-step approval flow', 'Mühür təsdiq ekranı: iki addımlı təsdiq axını')],
  ['clock', L3('Tatbikat Yönetimi', 'Tatbikat – Exercise Management', 'Tatbikat – Təlim İdarəetməsi'),
    L3('İş sürekliliği ve felaket kurtarma tatbikatlarını planlayın. Varlıklara ait RTO ve RPO hedeflerini gerçekleşen sonuçlarla karşılaştırın; başarısız sonuçlar için iyileştirme kayıtları oluşturun.', 'Plan business continuity and disaster recovery exercises. Compare the RTO and RPO targets of assets with actual results and create improvement records for failed outcomes.', 'Biznesin davamlılığı və fəlakətdən bərpa təlimlərini planlaşdırın. Aktivlərin RTO və RPO hədəflərini faktiki nəticələrlə müqayisə edin; uğursuz nəticələr üçün təkmilləşdirmə qeydləri yaradın.'),
    'tatbikat.jpg', L3('Tatbikat sonucu: hedef ve gerçekleşen RTO / RPO', 'Exercise result: target vs. actual RTO / RPO', 'Təlim nəticəsi: hədəf və faktiki RTO / RPO')],
  ['sync', L3('Akış – İş Akışı Yönetimi', 'Akış – Workflow Management', 'Akış – İş Axını İdarəetməsi'),
    L3('Koşullar, kriterler, onay adımları ve ekip yönlendirmeleriyle kurumunuza özgü iş akışları tasarlayın. Çok aşamalı ve farklı ekipleri ilgilendiren süreçleri tanımlı kurallarla yönetin.', 'Design workflows specific to your organization with conditions, criteria, approval steps and team routing. Manage multi-stage processes involving different teams with defined rules.', 'Şərtlər, meyarlar, təsdiq addımları və komanda yönləndirmələri ilə qurumunuza xas iş axınları qurun. Çoxmərhələli və müxtəlif komandaları əhatə edən prosesləri müəyyən qaydalarla idarə edin.'),
    'akis.jpg', L3('Akış düzenleyici: onay, koşul ve işlem adımları', 'Akış designer: approval, condition and action steps', 'Akış redaktoru: təsdiq, şərt və əməliyyat addımları')],
  ['key', L3('Kale – Active Directory Güvenlik ve Yetki Kontrolleri', 'Kale – Active Directory Security and Access Controls', 'Kale – Active Directory Təhlükəsizlik və Səlahiyyət Nəzarətləri'),
    L3('Active Directory güvenlik bulgularını, jenerik ve servis hesaplarının sahiplik bilgilerini ve periyodik yetki gözden geçirmelerini takip edin. Gerekli iyileştirme faaliyetlerini destek kayıtlarıyla ilişkilendirin.', 'Track Active Directory security findings, ownership of generic and service accounts and periodic access reviews. Link the required remediation activities to support tickets.', 'Active Directory təhlükəsizlik tapıntılarını, ümumi və xidmət hesablarının sahiblik məlumatlarını və dövri səlahiyyət baxışlarını izləyin. Lazımi təkmilləşdirmə fəaliyyətlərini dəstək sorğuları ilə əlaqələndirin.'),
    'kale.jpg', L3('Kale özet: hesap durumu, kategori puanları ve bulgular', 'Kale summary: account status, category scores and findings', 'Kale icmalı: hesab vəziyyəti, kateqoriya balları və tapıntılar')],
  ['chart', L3('Analiz – Raporlama ve Yönetim Panoları', 'Analiz – Reporting and Management Dashboards', 'Analiz – Hesabat və İdarəetmə Panelləri'),
    L3('GLPI ve Sayru-Yön verilerini panolarda bir araya getirin. Özel veri kaynakları, grafikler, dinamik filtreler ve zamanlanmış raporlarla operasyonel görünürlüğü artırın.', 'Bring GLPI and Sayru-Yön data together on dashboards. Increase operational visibility with custom data sources, charts, dynamic filters and scheduled reports.', 'GLPI və Sayru-Yön məlumatlarını panellərdə birləşdirin. Xüsusi məlumat mənbələri, qrafiklər, dinamik filtrlər və planlaşdırılmış hesabatlarla əməliyyat görünürlüyünü artırın.'),
    'analiz-degisiklik.jpg', L3('Analiz: Değişiklik Yönetimi panosu', 'Analiz: Change Management dashboard', 'Analiz: Dəyişiklik İdarəetməsi paneli')],
  ['user', L3('Zimmet Yönetimi', 'Zimmet – Asset Assignment Management', 'Zimmet – Aktiv Təhvili İdarəetməsi'),
    L3('Kullanıcılara atanan varlıkların teslim ve kabul süreçlerini formlar ve onay mekanizmalarıyla takip edin. Kullanıcı teyitlerini ve tanımlanmış otomatik zimmet seçeneklerini yönetin.', 'Track the handover and acceptance of assets assigned to users through forms and approval mechanisms. Manage user confirmations and the defined automatic assignment options.', 'İstifadəçilərə təhkim edilmiş aktivlərin təhvil-təslim və qəbul proseslərini formalar və təsdiq mexanizmləri ilə izləyin. İstifadəçi təsdiqlərini və müəyyən edilmiş avtomatik təhvil seçimlərini idarə edin.'),
    'zimmet.jpg', L3('Zimmet onay isteği: devredilen varlıklar', 'Assignment approval request: transferred assets', 'Təhvil təsdiq sorğusu: ötürülən aktivlər')],
];

const YON_GAINS = [
  L3('Daha tutarlı ve ilişkili bilgi varlığı envanteri', 'A more consistent and connected information asset inventory', 'Daha ardıcıl və əlaqəli informasiya aktivləri inventarı'),
  L3('Daha kontrollü ve izlenebilir işlem süreçleri', 'More controlled and traceable transaction processes', 'Daha nəzarətli və izlənə bilən əməliyyat prosesləri'),
  L3('Sürekli veri kalitesi ve operasyonel kontrol takibi', 'Continuous tracking of data quality and operational controls', 'Davamlı məlumat keyfiyyəti və əməliyyat nəzarəti izləməsi'),
  L3('Risklerin, sorumluların ve iyileştirme faaliyetlerinin birlikte yönetimi', 'Joint management of risks, owners and remediation activities', 'Risklərin, məsul şəxslərin və təkmilləşdirmə fəaliyyətlərinin birgə idarə edilməsi'),
  L3('Onaylı, sürümlü ve güncelliği takip edilen dokümanlar', 'Approved, versioned and up-to-date documents', 'Təsdiqlənmiş, versiyalanmış və aktuallığı izlənən sənədlər'),
  L3('Ölçülebilir operasyonel göstergeler ve düzenli yönetim raporları', 'Measurable operational indicators and regular management reports', 'Ölçülə bilən əməliyyat göstəriciləri və müntəzəm idarəetmə hesabatları'),
  L3('Denetim çalışmalarını destekleyen ilişkili kayıtlar ve kontrol kanıtları', 'Connected records and control evidence that support audits', 'Auditləri dəstəkləyən əlaqəli qeydlər və nəzarət sübutları'),
];

const SHOT_TXT = {
  intro: L3('Kurum kimliğine göre düzenlenmiş Sayru-Yön giriş ekranı', 'Sayru-Yön login screen customized to the corporate identity', 'Korporativ üsluba uyğunlaşdırılmış Sayru-Yön giriş ekranı'),
  glpi: L3('Analiz: GLPI envanter verisinden Varlık Yönetimi panosu', 'Analiz: Asset Management dashboard built from GLPI inventory data', 'Analiz: GLPI inventar məlumatlarından Aktiv İdarəetməsi paneli'),
  dash0: L3('Analiz: Destek Merkezi panosu', 'Analiz: Service Desk dashboard', 'Analiz: Dəstək Mərkəzi paneli'),
  dash1: L3('Pusula Panosu: doğal ve artık risk ısı haritaları', 'Pusula dashboard: inherent and residual risk heat maps', 'Pusula paneli: təbii və qalıq risk istilik xəritələri'),
  ahtHero: L3('Ahtapot özet: durumlar, zafiyetler, farklar ve modüller', 'Ahtapot summary: statuses, vulnerabilities, differences and modules', 'Ahtapot icmalı: vəziyyətlər, zəifliklər, fərqlər və modullar'),
  ahtTrend: L3('Ahtapot kapsama ve eğilim: uyum oranı ve bulgu sayılarının değişimi', 'Ahtapot coverage and trend: compliance rate and finding counts over time', 'Ahtapot əhatə və trend: uyğunluq dərəcəsi və tapıntı saylarının dəyişməsi'),
};

function ProductOverview() {
  const { t, lang } = useT();
  const T = (o) => tx(o, lang);
  const [cur, setCur] = useState(0);
  const m = YON_MODULES[cur];
  // Yönetimden Genel Bakış metni biçimli (çok satırlı) girildiyse aynı içerik sayfanın üstünde zaten var.
  const dup = typeof isRich === 'function' && (isRich(t('yon.intro.p1')) || isRich(t('yon.intro.p2')));
  return (
    <div className="prod">
      {!dup && <section className="section prod-intro">
        <div className="wrap prod-intro__in">
          <div className="prod-intro__text">
            <div className="kicker">{T(P.overview)}</div>
            <h2 className="prod-h">{T(P.platform)}</h2>
            <p className="prod-slogan">{T(P.slogan)}</p>
            <p>{T(P.introP1)}</p>
            <p>{T(P.introP2)}</p>
          </div>
          <div className="prod-intro__media">
            <Shot slot="yon.prod.intro" src="giris.jpg" alt={T(SHOT_TXT.intro)} caption />
          </div>
        </div>
      </section>}

      {!dup && <section className="section section--tight prod-why">
        <div className="wrap">
          <div className="section-head">
            <h2>{T(P.why)}</h2>
            <p className="lead">{T(P.whyLead)}</p>
          </div>
          <div className="prod-why__grid">
            {YON_WHY.map(([ic, tt, d], n) => (
              <div className="prod-card" key={n}>
                <span className="prod-card__ic"><PIcon name={ic} /></span>
                <h3>{T(tt)}</h3>
                <p>{T(d)}</p>
              </div>
            ))}
          </div>
        </div>
      </section>}

      <section className="section prod-mods dark">
        <div className="cc-grid" style={{ opacity: .35 }}></div>
        <div className="wrap prod-mods__wrap">
          <div className="section-head">
            <h2 className="prod-mods__title">{T(P.modules)}</h2>
          </div>
          <div className="prod-mods__in">
            <div className="prod-mods__list" role="tablist">
              {YON_MODULES.map(([ic, tt], i) => (
                <button key={i} role="tab" aria-selected={i === cur} className={'prod-mods__tab' + (i === cur ? ' is-on' : '')} onClick={() => setCur(i)}>
                  <span className="mono prod-mods__n">{String(i + 1).padStart(2, '0')}</span>
                  <span className="prod-mods__t">{T(tt)}</span>
                  <PIcon name="arrow" size={16} />
                </button>
              ))}
              <a href="Sayru-Ahtapot.html" className="prod-mods__tab prod-mods__tab--ext">
                <span className="mono prod-mods__n">+</span>
                <span className="prod-mods__t">{T(P.ahtTab)} <small>{T(P.ahtTabSub)}</small></span>
                <PIcon name="arrow" size={16} />
              </a>
            </div>
            <div className="prod-mods__panel" key={cur}>
              <div className="prod-mods__head">
                <span className="prod-card__ic prod-card__ic--dk"><PIcon name={m[0]} size={22} /></span>
                <h3>{T(m[1])}</h3>
              </div>
              <p>{T(m[2])}</p>
              <Shot slot={'yon.prod.mod.' + cur} src={m[3]} alt={T(m[4])} caption className="pshot--dk" />
            </div>
          </div>
        </div>
      </section>

      <section className="section prod-glpi">
        <div className="wrap prod-glpi__in">
          <div className="prod-glpi__media">
            <Shot slot="yon.prod.glpi" src="analiz-varlik.jpg" alt={T(SHOT_TXT.glpi)} caption />
          </div>
          <div className="prod-glpi__text">
            <div className="kicker">{T(P.glpiKick)}</div>
            <h2 className="prod-h">{T(P.glpiTitle)}</h2>
            <p>{T(P.glpiP1)}</p>
            <p>{T(P.glpiP2)}</p>
          </div>
        </div>
      </section>

      <section className="section section--tight prod-gains">
        <div className="wrap">
          <div className="section-head center">
            <div className="kicker">{T(P.gainsKick)}</div>
          </div>
          <div className="prod-gains__grid">
            {YON_GAINS.map((g, n) => (
              <div className="prod-gain" key={n}><span className="prod-gain__ic"><PIcon name="check" size={16} /></span>{T(g)}</div>
            ))}
          </div>
          <div className="prod-dash">
            <div><Shot slot="yon.prod.dash.0" src="analiz-destek.jpg" alt={T(SHOT_TXT.dash0)} caption /></div>
            <div><Shot slot="yon.prod.dash.1" src="pusula.jpg" alt={T(SHOT_TXT.dash1)} caption /></div>
          </div>
        </div>
      </section>

      <DocDownloads groups={['yon', 'aht']} />

      <section className="section section--tight prod-close-wrap">
        <div className="wrap">
          <div className="prod-close">
            <div>
              <h2>{T(P.closeYonT)}</h2>
              <p>{T(P.closeYonP)}</p>
              <p className="prod-close__ask">{T(P.closeYonAsk)}</p>
            </div>
            <div className="prod-close__act">
              <a href="index.html#iletisim" className="btn btn--cyan">{T(P.contactBtn)} <span className="ar"><PIcon name="arrow" size={17} /></span></a>
              <a href="mailto:info@sayru.com.tr" className="btn btn--ghost-light"><PIcon name="mail" size={16} /> info@sayru.com.tr</a>
            </div>
          </div>
        </div>
      </section>
    </div>
  );
}

/* ------------------------------------------------------------ Dokümanlar (PDF indirme) */
const DOCS = {
  yon: [
    ['Sayru-Yon-Detayli.pdf', L3('Sayru-Yön — Detaylı Doküman', 'Sayru-Yön — Detailed Document', 'Sayru-Yön — Ətraflı Sənəd'),
      L3('Platformun ve tüm modüllerin ayrıntılı anlatımı, gerçek ürün ekranlarıyla.', 'A detailed description of the platform and all modules, with real product screens.', 'Platformanın və bütün modulların real məhsul ekranları ilə ətraflı təsviri.'),
      L3('17 sayfa · 6 MB', '17 pages · 6 MB', '17 səhifə · 6 MB')],
    ['Sayru-Yon-Ozet.pdf', L3('Sayru-Yön — Özet', 'Sayru-Yön — Summary', 'Sayru-Yön — Qısa İcmal'),
      L3('Platformu ve modülleri kısaca tanıtan özet doküman.', 'A short document introducing the platform and its modules.', 'Platformanı və modulları qısaca tanıdan icmal sənəd.'),
      L3('6 sayfa · 4,6 MB', '6 pages · 4.6 MB', '6 səhifə · 4,6 MB')],
  ],
  aht: [
    ['Sayru-Yon-Ahtapot-Detayli.pdf', L3('Ahtapot Modülü — Detaylı Doküman', 'Ahtapot Module — Detailed Document', 'Ahtapot Modulu — Ətraflı Sənəd'),
      L3('AD ↔ GLPI mutabakatı, yazılım uyumluluğu ve zafiyet yönetiminin ayrıntılı anlatımı.', 'A detailed description of AD ↔ GLPI reconciliation, software compliance and vulnerability management.', 'AD ↔ GLPI uzlaşdırması, proqram təminatı uyğunluğu və zəiflik idarəetməsinin ətraflı təsviri.'),
      L3('11 sayfa · 2,8 MB', '11 pages · 2.8 MB', '11 səhifə · 2,8 MB')],
    ['Sayru-Yon-Ahtapot-Ozet.pdf', L3('Ahtapot Modülü — Özet', 'Ahtapot Module — Summary', 'Ahtapot Modulu — Qısa İcmal'),
      L3('Ahtapot denetim yeteneklerini kısaca tanıtan özet doküman.', "A short document introducing Ahtapot's audit capabilities.", 'Ahtapot-un audit imkanlarını qısaca tanıdan icmal sənəd.'),
      L3('4 sayfa · 2,8 MB', '4 pages · 2.8 MB', '4 səhifə · 2,8 MB')],
  ],
};
function DocDownloads({ groups, title }) {
  const { lang } = useT();
  const T = (o) => tx(o, lang);
  // Sıra (İsmail Bey 26.10.2026): üst satır Sayru-Yön Özet | Ahtapot Özet, alt satır Sayru-Yön Detaylı | Ahtapot Detaylı
  const list = (groups.indexOf('yon') !== -1 && groups.indexOf('aht') !== -1)
    ? [DOCS.yon[1], DOCS.aht[1], DOCS.yon[0], DOCS.aht[0]]
    : groups.reduce((a, g) => a.concat(DOCS[g] || []), []);
  return (
    <section className="section section--tight prod-docs">
      <div className="wrap">
        <div className="section-head">
          <div className="kicker">{T(P.docsKick)}</div>
          <h2>{T(title || P.docsTitle)}</h2>
          {lang !== 'tr' && <p className="lead">{T(P.docsNote)}</p>}
        </div>
        <div className="prod-docs__grid">
          {list.map(([f, tt, d, meta]) => (
            <a key={f} className="prod-doc" href={'assets/dokuman/' + f} download target="_blank" rel="noopener">
              <span className="prod-doc__ic"><PIcon name="doc" size={24} /><i className="mono">PDF</i></span>
              <span className="prod-doc__body">
                <b>{T(tt)}</b>
                <span>{T(d)}</span>
                <small className="mono">{T(meta)}</small>
              </span>
              <span className="prod-doc__btn">{T(P.download)} <PIcon name="arrow" size={15} /></span>
            </a>
          ))}
        </div>
      </div>
    </section>
  );
}

/* ------------------------------------------------------------ Ahtapot */

const AHT_CHECKS = [
  ['sync', L3('Active Directory ve GLPI envanter mutabakatı', 'Active Directory and GLPI inventory reconciliation', 'Active Directory və GLPI inventarının uzlaşdırılması'),
    L3('Active Directory bilgisayar hesapları ile GLPI envanter kayıtlarını karşılaştırarak eksik, eşleşmeyen veya güncelliğini yitirmiş kayıtları belirleyin. Eski hostname bilgilerini, kapatılmış hesapları ve uzun süredir oturum açılmayan bilgisayarları inceleyin.', 'Compare Active Directory computer accounts with GLPI inventory records to identify missing, mismatched or outdated records. Review old hostnames, disabled accounts and computers with no logon for a long time.', 'Active Directory kompüter hesablarını GLPI inventar qeydləri ilə müqayisə edərək çatışmayan, uyğun gəlməyən və ya köhnəlmiş qeydləri müəyyən edin. Köhnə hostname məlumatlarını, bağlanmış hesabları və uzun müddətdir sistemə daxil olunmayan kompüterləri araşdırın.')],
  ['pc', L3('GLPI Agent sürüm ve kayıt denetimi', 'GLPI Agent version and registration audit', 'GLPI Agent versiya və qeydiyyat auditi'),
    L3('Envanter ajanı bulunmayan, eski sürüm kullanan veya güncel veri göndermeyen bilgisayarları belirleyin. Envanter toplama kapsamını ve ajan uyumluluğunu izleyin.', 'Identify computers without an inventory agent, running an old version or not sending current data. Monitor inventory collection coverage and agent compliance.', 'İnventar agenti olmayan, köhnə versiyadan istifadə edən və ya aktual məlumat göndərməyən kompüterləri müəyyən edin. İnventar toplama əhatəsini və agent uyğunluğunu izləyin.')],
  ['list', L3('Envanter doğruluğu ve mükerrer kayıtlar', 'Inventory accuracy and duplicate records', 'İnventar dəqiqliyi və təkrarlanan qeydlər'),
    L3('Seri numarası, stok numarası ve bilgisayar adı üzerinden olası mükerrer kayıtları, eksik cihaz kimliklerini ve değişen bilgileri tespit edin. Bilgisayar, monitör ve çevre birimi kayıtlarının tutarlılığını inceleyin.', 'Detect possible duplicates, missing device identities and changed details using serial number, inventory number and computer name. Review the consistency of computer, monitor and peripheral records.', 'Seriya nömrəsi, inventar nömrəsi və kompüter adı əsasında mümkün təkrarlanan qeydləri, çatışmayan cihaz identifikatorlarını və dəyişmiş məlumatları aşkar edin. Kompüter, monitor və periferik qurğu qeydlərinin ardıcıllığını yoxlayın.')],
  ['user', L3('Zimmet, oturum ve lokasyon uyumluluğu', 'Assignment, logon and location consistency', 'Təhvil, sessiya və məkan uyğunluğu'),
    L3('GLPI üzerindeki kullanıcı atamalarını oturum bilgileri ve lokasyon kayıtlarıyla karşılaştırın. Kullanıcı, cihaz ve lokasyon bilgilerindeki farklılıkları belirleyerek envanter kayıtlarının doğruluğunu destekleyin.', 'Compare user assignments in GLPI with logon data and location records. Identify differences in user, device and location information to keep inventory records accurate.', 'GLPI-dəki istifadəçi təyinatlarını sessiya məlumatları və məkan qeydləri ilə müqayisə edin. İstifadəçi, cihaz və məkan məlumatlarındakı fərqləri müəyyən edərək inventar qeydlərinin dəqiqliyini dəstəkləyin.')],
  ['apps', L3('Uygulama uyumluluğu', 'Application compliance', 'Tətbiq uyğunluğu'),
    L3('Bilgisayarlarda bulunması gereken uygulamaları ve kullanılabilecek sürümleri tanımlayın. Eksik, uygunsuz veya gereğinden fazla uygulamaları bilgisayar bazında izleyin; uyumsuzlukların giderilmesini takip edin.', 'Define the applications that must be present on computers and the versions allowed. Monitor missing, non-compliant or unnecessary applications per computer and follow up on remediation.', 'Kompüterlərdə olmalı olan tətbiqləri və istifadə edilə bilən versiyaları müəyyən edin. Çatışmayan, uyğun olmayan və ya artıq tətbiqləri kompüter üzrə izləyin; uyğunsuzluqların aradan qaldırılmasını izləyin.')],
  ['shield', L3('Uygulama beyaz liste ve kara liste yönetimi', 'Application allowlist and blocklist management', 'Tətbiqlərin icazəli və qadağan siyahısının idarə edilməsi'),
    L3('İzinli, yasaklı ve kontrol dışında bırakılan uygulamaları belirleyin. Yasaklı yazılımları veya tanımlı politikalara uymayan uygulamaları tespit ederek gerekli inceleme ve iyileştirme süreçlerini başlatın.', 'Define allowed, prohibited and excluded applications. Detect prohibited software or applications that violate defined policies and start the necessary review and remediation processes.', 'İcazəli, qadağan edilmiş və nəzarətdən kənar saxlanılan tətbiqləri müəyyən edin. Qadağan edilmiş proqramları və ya müəyyən siyasətlərə uyğun olmayan tətbiqləri aşkar edərək lazımi araşdırma və təkmilləşdirmə proseslərini başladın.')],
  ['bug', L3('Zafiyet yönetimi', 'Vulnerability management', 'Zəiflik idarəetməsi'),
    L3('Desteklenen zafiyet kaynaklarından ve envanter bilgilerinden yararlanarak güvenlik bulgularını ilgili bilgisayarlarla eşleştirin. Nessus Professional, Tenable.sc, Tenable.io, Wazuh, OpenVAS/Greenbone ve CSV dosyalarından gelen verileri yapılandırmaya bağlı olarak değerlendirin. CISA KEV ve EPSS bilgileriyle zafiyetlerin önceliklendirilmesini destekleyin; kaynakları, SLA kurallarını ve otomatik destek kaydı oluşturma koşullarını yapılandırın.',
      'Match security findings to the affected computers using supported vulnerability sources and inventory data. Depending on configuration, evaluate data from Nessus Professional, Tenable.sc, Tenable.io, Wazuh, OpenVAS/Greenbone and CSV files. Support prioritization with CISA KEV and EPSS data, and configure sources, SLA rules and conditions for automatic ticket creation.',
      'Dəstəklənən zəiflik mənbələrindən və inventar məlumatlarından istifadə edərək təhlükəsizlik tapıntılarını əlaqəli kompüterlərlə uyğunlaşdırın. Konfiqurasiyadan asılı olaraq Nessus Professional, Tenable.sc, Tenable.io, Wazuh, OpenVAS/Greenbone və CSV fayllarından gələn məlumatları qiymətləndirin. CISA KEV və EPSS məlumatları ilə zəifliklərin prioritetləşdirilməsini dəstəkləyin; mənbələri, SLA qaydalarını və avtomatik dəstək sorğusu yaratma şərtlərini konfiqurasiya edin.')],
];

const AHT_GAINS = [
  [L3('Envanter tutarlılığı', 'Inventory consistency', 'İnventar ardıcıllığı'), L3('Active Directory ve GLPI arasındaki farklılıkların görünür hale gelmesi.', 'Differences between Active Directory and GLPI become visible.', 'Active Directory ilə GLPI arasındakı fərqlərin görünən olması.')],
  [L3('Daha güncel envanter', 'A more current inventory', 'Daha aktual inventar'), L3('Ajan eksikliği, eski hostname ve güncel olmayan kayıtların tespiti.', 'Detection of missing agents, old hostnames and outdated records.', 'Agent çatışmazlığının, köhnə hostname-lərin və köhnəlmiş qeydlərin aşkarlanması.')],
  [L3('Güvenilir cihaz kimlikleri', 'Reliable device identities', 'Etibarlı cihaz identifikatorları'), L3('Seri numarası, stok numarası ve mükerrer kayıt kontrolleri.', 'Serial number, inventory number and duplicate record checks.', 'Seriya nömrəsi, inventar nömrəsi və təkrarlanan qeyd yoxlamaları.')],
  [L3('Doğru zimmet bilgileri', 'Accurate assignment data', 'Dəqiq təhvil məlumatları'), L3('Kullanıcı, oturum, lokasyon ve çevre birimi ilişkilerinin değerlendirilmesi.', 'Evaluation of user, logon, location and peripheral relationships.', 'İstifadəçi, sessiya, məkan və periferik qurğu əlaqələrinin qiymətləndirilməsi.')],
  [L3('Yazılım standardizasyonu', 'Software standardization', 'Proqram təminatının standartlaşdırılması'), L3('Eksik, uygunsuz ve yasaklı uygulamaların belirlenmesi.', 'Identification of missing, non-compliant and prohibited applications.', 'Çatışmayan, uyğun olmayan və qadağan edilmiş tətbiqlərin müəyyən edilməsi.')],
  [L3('Proaktif zafiyet takibi', 'Proactive vulnerability tracking', 'Proaktiv zəiflik izləməsi'), L3('Güvenlik bulgularının etkilenen bilgisayarlarla ilişkilendirilmesi ve önceliklendirilmesi.', 'Linking security findings to affected computers and prioritizing them.', 'Təhlükəsizlik tapıntılarının təsirlənən kompüterlərlə əlaqələndirilməsi və prioritetləşdirilməsi.')],
  [L3('Operasyonel aksiyon takibi', 'Operational action tracking', 'Əməliyyat tədbirlərinin izlənməsi'), L3('Bulguların destek kayıtlarıyla ilişkilendirilmesi ve iyileştirme durumunun izlenmesi.', 'Linking findings to support tickets and tracking remediation status.', 'Tapıntıların dəstək sorğuları ilə əlaqələndirilməsi və təkmilləşdirmə vəziyyətinin izlənməsi.')],
];

function AhtapotPage() {
  useReveal();
  const { lang } = useT();
  const T = (o) => tx(o, lang);
  return (
    <main className="prod prod--aht">
      <section className="shero dark">
        <div className="cc-grid shero__grid"></div>
        <div className="hero__glow hero__glow--1"></div>
        <div className="wrap aht-hero">
          <div className="aht-hero__text">
            <nav className="crumb" aria-label="breadcrumb">
              <a href="index.html">{T(P.home)}</a><span className="crumb__sep">/</span>
              <a href="Sayru-Yon.html">Sayru-Yön</a><span className="crumb__sep">/</span>
              <span className="crumb__cur">Ahtapot</span>
            </nav>
            <div className="kicker kicker--ondark">{T(P.platform)}</div>
            <h1 className="shero__title">{T(P.ahtTitle)}</h1>
            <p className="aht-hero__sub">{T(P.ahtSub)}</p>
            <p className="aht-hero__slogan">{T(P.ahtSlogan)}</p>
            <div className="shero__actions">
              <a href="index.html#iletisim" className="btn btn--cyan">{T(P.contactBtn)} <span className="ar"><PIcon name="arrow" size={17} /></span></a>
              <a href="Sayru-Yon.html" className="btn btn--ghost-light">{T(P.backYon)}</a>
            </div>
          </div>
          <div className="aht-hero__media">
            <Shot slot="aht.hero" src="ahtapot-ozet.jpg" alt={T(SHOT_TXT.ahtHero)} caption className="pshot--dk" />
          </div>
        </div>
      </section>

      <section className="section prod-intro">
        <div className="wrap aht-intro">
          <p>{T(P.ahtP1)}</p>
          <p>{T(P.ahtP2)}</p>
          <p className="aht-intro__goal">{T(P.ahtGoal)}</p>
        </div>
      </section>

      <section className="section section--tight prod-why">
        <div className="wrap">
          <div className="section-head">
            <div className="kicker">{T(P.ahtChecksKick)}</div>
            <h2>{T(P.ahtChecksTitle)}</h2>
          </div>
          <div className="aht-checks">
            {AHT_CHECKS.map(([ic, tt, d], i) => (
              <div className={'prod-card aht-check' + (i === AHT_CHECKS.length - 1 ? ' aht-check--wide' : '')} key={i}>
                <div className="aht-check__head">
                  <span className="prod-card__ic"><PIcon name={ic} /></span>
                  <span className="mono aht-check__n">{String(i + 1).padStart(2, '0')}</span>
                </div>
                <h3>{T(tt)}</h3>
                <p>{T(d)}</p>
              </div>
            ))}
          </div>
        </div>
      </section>

      <section className="section prod-glpi">
        <div className="wrap prod-glpi__in">
          <div className="prod-glpi__text">
            <div className="kicker">{T(P.ahtActKick)}</div>
            <h2 className="prod-h">{T(P.ahtActTitle)}</h2>
            <p>{T(P.ahtActP1)}</p>
            <p>{T(P.ahtActP2)}</p>
          </div>
          <div className="prod-glpi__media">
            <Shot slot="aht.trend" src="ahtapot-egilim.jpg" alt={T(SHOT_TXT.ahtTrend)} caption />
          </div>
        </div>
      </section>

      <section className="section section--tight prod-gains">
        <div className="wrap">
          <div className="section-head center">
            <div className="kicker">{T(P.ahtGainsKick)}</div>
          </div>
          <div className="aht-gains">
            {AHT_GAINS.map(([tt, d], n) => (
              <div className="prod-gain prod-gain--col" key={n}><span className="prod-gain__ic"><PIcon name="check" size={16} /></span><div><b>{T(tt)}</b><span>{T(d)}</span></div></div>
            ))}
          </div>
        </div>
      </section>

      <DocDownloads groups={['aht', 'yon']} title={P.docsTitleAht} />

      <section className="section section--tight prod-close-wrap">
        <div className="wrap">
          <div className="prod-close">
            <div>
              <h2>{T(P.closeAhtT)}</h2>
              <p>{T(P.closeAhtP)}</p>
              <p className="prod-close__ask">{T(P.closeAhtAsk)}</p>
            </div>
            <div className="prod-close__act">
              <a href="index.html#iletisim" className="btn btn--cyan">{T(P.contactBtn)} <span className="ar"><PIcon name="arrow" size={17} /></span></a>
              <a href="mailto:info@sayru.com.tr" className="btn btn--ghost-light"><PIcon name="mail" size={16} /> info@sayru.com.tr</a>
            </div>
          </div>
        </div>
      </section>
    </main>
  );
}

const PRODUCT_SLOTS = {
  yon: [['yon.prod.intro', 'Giriş görseli', SHOT_TXT.intro.tr]]
    .concat(YON_MODULES.map((m, i) => ['yon.prod.mod.' + i, 'Modül ' + (i + 1) + ' · ' + m[1].tr, m[4].tr]))
    .concat([['yon.prod.glpi', 'GLPI altyapısı görseli', SHOT_TXT.glpi.tr],
      ['yon.prod.dash.0', 'Katkılar · görsel 1', SHOT_TXT.dash0.tr],
      ['yon.prod.dash.1', 'Katkılar · görsel 2', SHOT_TXT.dash1.tr]]),
  aht: [['aht.hero', 'Üst görsel', SHOT_TXT.ahtHero.tr],
    ['aht.trend', 'Bulgudan aksiyona görseli', SHOT_TXT.ahtTrend.tr]],
};

Object.assign(window, { ProductOverview, AhtapotPage, PRODUCT_SLOTS, DocDownloads });
