// ── Alarmlar Sayfası — NEXOR · İzmir Ana Tesis · Kapsamlı Alarm Merkezi ──

const ALL_ALARMS = [
  // Elektrik Alarmları
  { id:'a1',  code:'ELK-0142', severity:'err',  source:'Elektrik',  category:'Güç Kalitesi', machine:'Kompresör Odası Panosu', msg:'Güç faktörü kritik seviyede düştü (0.78 < 0.85)', detail:'Reaktif güç kompanzasyonu yetersiz. Kondansatör bankası: 4 üniteden 1 aktif. Reaktif ceza riski: ~₺18.000/ay. Acil müdahale gerekli.', time:'07:22', date:'01 May 2026', ack:false, resolved:false, impact:'₺18.000/ay ceza riski', priority:'Kritik' },
  { id:'a2',  code:'ELK-0211', severity:'warn', source:'Elektrik',  category:'Aşırı Tüketim', machine:'Fırın Grubu 2 Panosu', msg:'Enerji tüketimi 30 günlük bazın %22 üzerinde (720 kW > 590 kW)', detail:'Son 3 saattir 720 kW ortalama. Baz değer: 590 kW. Yakıt/hava oranı kontrolü veya refraktör aşınması nedeni olabilir.', time:'09:41', date:'01 May 2026', ack:false, resolved:false, impact:'Günlük ₺2.400 fazla maliyet', priority:'Yüksek' },
  { id:'a3',  code:'ELK-0099', severity:'warn', source:'Elektrik',  category:'Boşta İsraf',   machine:'Soğutma Masaları',      msg:'Boşta bekleme yükü: 48 kW — otomatik kesme aktif değil', detail:'10:58\'den bu yana boşta, 48 kW çekiyor. 8 saatlik vardiyada 384 kWh verimsiz tüketim. PLC\'de SP-SOGM-AUTO-OFF parametresini aktif edin.', time:'11:05', date:'01 May 2026', ack:false, resolved:false, impact:'384 kWh/vardiya israf', priority:'Orta' },
  { id:'a4',  code:'ELK-0033', severity:'err',  source:'Elektrik',  category:'İletişim',      machine:'SAY-004 (Kompresör)',   msg:'Sayaç bağlantısı kesildi — veri boşluğu aktif (08:14\'ten beri)', detail:'SAY-004 2 saat 53 dakikadır çevrimdışı. Tahmini veri boşluğu: ~253 kWh. Modbus bağlantı kablosu kontrol edilmeli.', time:'08:14', date:'01 May 2026', ack:false, resolved:false, impact:'Veri kaybı devam ediyor', priority:'Kritik' },
  { id:'a5',  code:'ELK-0174', severity:'warn', source:'Elektrik',  category:'Pik Talep',     machine:'Ana Dağıtım Panosu',    msg:'Pik talep aylık sözleşme limitine yaklaşıyor (4.820 kW / 5.000 kW)', detail:'Mevcut pik: 4.820 kW. Limit: 5.000 kW. %96.4 kullanım. Kritik olmayan yükleri puant saat dışına kaydırın.', time:'10:18', date:'01 May 2026', ack:true, resolved:false, impact:'Limit aşımında ₺32.000 ceza', priority:'Yüksek' },
  { id:'a6',  code:'ELK-0088', severity:'warn', source:'Elektrik',  category:'Harmonik',      machine:'Haddehane VFD Grubu',   msg:'THD-I seviyesi sınırın üzerinde (%7.8 > %5.0)', detail:'Değişken frekanslı sürücülerden kaynaklanan harmonik bozulma IEEE 519 limitlerini aşıyor. Aktif harmonik filtre devreye alınmalı.', time:'06:45', date:'01 May 2026', ack:false, resolved:false, impact:'Ekipman ömrü kısalması', priority:'Orta' },
  // Doğal Gaz Alarmları
  { id:'a7',  code:'GAZ-0015', severity:'err',  source:'Doğal Gaz', category:'Basınç',        machine:'Ana RMS İstasyonu',     msg:'Gaz basıncı alt limite yaklaştı (3.2 Bar < 3.5 Bar min)', detail:'Ana hat basıncı düşüyor. Şebeke tarafında sorun veya regülatör arızası olabilir. Fırın beslemesi etkilenebilir. İGDAŞ ile iletişime geçin.', time:'06:30', date:'01 May 2026', ack:false, resolved:false, impact:'Üretim durma riski', priority:'Kritik' },
  { id:'a8',  code:'GAZ-0042', severity:'warn', source:'Doğal Gaz', category:'Verimlilik',    machine:'Fırın 2 Brülör Grubu', msg:'Yanma verimi düştü — egzoz sıcaklığı normalin %15 üzerinde', detail:'Egzoz: 285°C (normal: 248°C). Brülör ayarı veya hava/yakıt oranı bozulmuş olabilir. Fazla yakıt tüketimi: ~8 Sm³/saat.', time:'08:55', date:'01 May 2026', ack:false, resolved:false, impact:'Günlük ~192 Sm³ fazla tüketim', priority:'Yüksek' },
  { id:'a9',  code:'GAZ-0031', severity:'warn', source:'Doğal Gaz', category:'Bakım',         machine:'Isıl İşlem Fırını',    msg:'Planlı bakım 15 gün gecikmiş — verimlilik düşüşü beklenir', detail:'Son bakım: 2026-04-16. Sonraki planlı: bugün. Geç bakım ısıl verimlilik kaybına neden olabilir (%6-9).', time:'06:00', date:'01 May 2026', ack:false, resolved:false, impact:'Verimlilik %6-9 düşüş riski', priority:'Orta' },
  // Su Alarmları
  { id:'a10', code:'SU-0008',  severity:'warn', source:'Su',        category:'Kaçak Şüphesi', machine:'Soğutma Hattı B',      msg:'Gece saatlerinde anormal su tüketimi tespit edildi (2.4 m³/h)', detail:'00:00-06:00 arasında ortalama 2.4 m³/h tüketim. Normal: 0.3 m³/h. Hat basıncında %8 düşüş var. Kaçak noktası tespiti yapılmalı.', time:'06:15', date:'01 May 2026', ack:false, resolved:false, impact:'Günlük ~14 m³ kayıp (₺308)', priority:'Yüksek' },
  { id:'a11', code:'SU-0012',  severity:'warn', source:'Su',        category:'Arıtma',        machine:'Arıtma Tesisi',        msg:'Atık su pH değeri limit dışında (8.9 > 8.5 üst limit)', detail:'Çıkış suyu pH değeri 8.9. Yasal limit: 6.5-8.5. Nötralizasyon sistemi kontrol edilmeli. Çevre cezası riski mevcut.', time:'09:20', date:'01 May 2026', ack:false, resolved:false, impact:'Çevre cezası riski', priority:'Yüksek' },
  { id:'a12', code:'SU-0003',  severity:'warn', source:'Su',        category:'Basınç',        machine:'Şebeke Girişi',        msg:'Şebeke su basıncı düşük (3.8 Bar < 4.0 Bar beklenen)', detail:'Son 2 saattir basınç düşük. Belediye şebekesinden kaynaklanıyor olabilir. Soğutma sistemi performansı etkilenebilir.', time:'10:45', date:'01 May 2026', ack:true, resolved:false, impact:'Soğutma performansı düşebilir', priority:'Orta' },
  // Çözülmüş
  { id:'a13', code:'ELK-0155', severity:'ok',   source:'Elektrik',  category:'Pik Talep',     machine:'Haddehane Hattı 1',    msg:'Pik talep normal aralığa döndü', detail:'08:30\'daki 1.920 kW pik değeri çözüldü. Şu an 1.480 kW.', time:'09:15', date:'01 May 2026', ack:true, resolved:true, impact:'—', priority:'—' },
  { id:'a14', code:'GAZ-0044', severity:'ok',   source:'Doğal Gaz', category:'Basınç',        machine:'Fırın 1 Hat Basıncı',  msg:'Gaz basıncı stabilize oldu', detail:'Basınç 300 mBar\'a döndü, normal operasyon devam ediyor.', time:'07:50', date:'01 May 2026', ack:true, resolved:true, impact:'—', priority:'—' },
  { id:'a15', code:'SU-0005',  severity:'ok',   source:'Su',        category:'Debi',          machine:'Soğutma Kulesi A',     msg:'Debi sensörü yeniden kalibre edildi', detail:'Kalibrasyon tamamlandı, ölçümler normal aralıkta.', time:'08:30', date:'01 May 2026', ack:true, resolved:true, impact:'—', priority:'—' },
];

const SEV_META = {
  err:  { color:'var(--signal-err)',  bg:'rgba(142,58,58,0.08)',  label:'Hata' },
  warn: { color:'var(--signal-warn)', bg:'rgba(160,122,46,0.08)', label:'Uyarı' },
  ok:   { color:'var(--signal-ok)',   bg:'rgba(74,123,78,0.08)',  label:'Çözüldü' },
};

const SRC_META = {
  'Elektrik':  { color:'var(--accent)', icon:'⚡' },
  'Doğal Gaz': { color:'#D97706',      icon:'🔥' },
  'Su':        { color:'#0EA5E9',       icon:'💧' },
};

const ALARM_PRI_META = {
  'Kritik': { color:'var(--signal-err)', bg:'rgba(142,58,58,0.12)' },
  'Yüksek': { color:'var(--signal-warn)', bg:'rgba(160,122,46,0.1)' },
  'Orta':   { color:'var(--text-muted)', bg:'var(--surface)' },
  '—':      { color:'var(--text-muted)', bg:'var(--surface)' },
};

const AlarmsPage = ({ tweaks }) => {
  const [ackedMap, setAckedMap] = React.useState(()=>{ const m={}; ALL_ALARMS.forEach(a=>m[a.id]=a.ack); return m; });
  const [expanded, setExpanded] = React.useState(null);
  const [sevFilter, setSevFilter] = React.useState('Tümü');
  const [srcFilter, setSrcFilter] = React.useState('Tümü');
  const r=tweaks.radius==='round'?14:tweaks.radius==='medium'?8:4;

  const active=ALL_ALARMS.filter(a=>!a.resolved);
  const resolved=ALL_ALARMS.filter(a=>a.resolved);

  let filtered=ALL_ALARMS;
  if(sevFilter==='Aktif') filtered=active;
  else if(sevFilter==='Çözüldü') filtered=resolved;
  else if(sevFilter==='Kritik') filtered=ALL_ALARMS.filter(a=>a.severity==='err'&&!a.resolved);
  else if(sevFilter==='Uyarılar') filtered=ALL_ALARMS.filter(a=>a.severity==='warn'&&!a.resolved);
  if(srcFilter!=='Tümü') filtered=filtered.filter(a=>a.source===srcFilter);

  const elecCount=active.filter(a=>a.source==='Elektrik').length;
  const gasCount=active.filter(a=>a.source==='Doğal Gaz').length;
  const waterCount=active.filter(a=>a.source==='Su').length;
  const critCount=active.filter(a=>a.severity==='err').length;

  return (
    <div className="page-enter" style={{ display:'flex', flexDirection:'column', gap:20 }}>
      {/* KPI Şeridi */}
      <div style={{ display:'grid', gridTemplateColumns:'repeat(6,1fr)', gap:10 }}>
        {[
          { label:'Toplam Aktif', value:active.length, color:'var(--signal-err)' },
          { label:'Kritik Seviye', value:critCount, color:'var(--signal-err)' },
          { label:'Onaylanmamış', value:active.filter(a=>!ackedMap[a.id]).length, color:'var(--signal-warn)' },
          { label:'⚡ Elektrik', value:elecCount, color:'var(--accent)' },
          { label:'🔥 Doğal Gaz', value:gasCount, color:'#D97706' },
          { label:'💧 Su', value:waterCount, color:'#0EA5E9' },
        ].map((s,i)=>(
          <div key={i} style={{ background:'var(--bg-elevated)', border:'1px solid var(--border)', borderRadius:r, padding:'12px 16px', boxShadow:'var(--shadow-1)' }}>
            <div style={{ fontFamily:'var(--font-mono)', fontSize:9, color:'var(--text-muted)', textTransform:'uppercase', letterSpacing:'0.05em', marginBottom:6 }}>{s.label}</div>
            <div style={{ fontSize:26, fontWeight:600, letterSpacing:'-0.03em', color:s.color }}>{s.value}</div>
          </div>
        ))}
      </div>

      {/* Kaynak filtre tabları */}
      <div style={{ display:'flex', gap:8, alignItems:'center', flexWrap:'wrap' }}>
        <div style={{ display:'flex', gap:4, background:'var(--surface)', border:'1px solid var(--border)', borderRadius:r, padding:3 }}>
          {['Tümü','Elektrik','Doğal Gaz','Su'].map(src=>{
            const active2=srcFilter===src;
            const col=src==='Tümü'?'var(--text)':SRC_META[src]?.color;
            return (
              <button key={src} onClick={()=>setSrcFilter(src)} style={{ padding:'5px 14px', borderRadius:r-2, border:0, fontSize:12, fontWeight:active2?600:400, cursor:'pointer', background:active2?'var(--bg-elevated)':'transparent', color:active2?col:'var(--text-muted)', boxShadow:active2?'var(--shadow-1)':'none', transition:'all 140ms', fontFamily:'var(--font-sans)', display:'flex', alignItems:'center', gap:4 }}>
                {src!=='Tümü'&&<div style={{ width:6, height:6, borderRadius:'50%', background:SRC_META[src]?.color, opacity:active2?1:0.4 }}/>}
                {src}
              </button>
            );
          })}
        </div>
        <div style={{ width:1, height:24, background:'var(--border)' }}/>
        <div style={{ display:'flex', gap:4 }}>
          {['Tümü','Aktif','Kritik','Uyarılar','Çözüldü'].map(f=>(
            <button key={f} onClick={()=>setSevFilter(f)} style={{ padding:'5px 12px', borderRadius:r-4, border:`1px solid ${sevFilter===f?'var(--accent)':'var(--border)'}`, background:sevFilter===f?'var(--accent-weak)':'var(--bg-elevated)', color:sevFilter===f?'var(--accent)':'var(--text-secondary)', fontSize:12, cursor:'pointer', transition:'all 140ms', fontWeight:sevFilter===f?500:400 }}>{f}</button>
          ))}
        </div>
        <div style={{ marginLeft:'auto', fontFamily:'var(--font-mono)', fontSize:11, color:'var(--text-muted)' }}>
          {filtered.length} kayıt · Otomatik yenileme: 30s
        </div>
      </div>

      {/* Alarm listesi */}
      <div style={{ background:'var(--bg-elevated)', border:'1px solid var(--border)', borderRadius:r, boxShadow:'var(--shadow-1)', overflow:'hidden' }}>
        {filtered.length===0 && (
          <div style={{ padding:'40px 20px', textAlign:'center', color:'var(--text-muted)', fontSize:13 }}>Bu filtreye uygun alarm bulunamadı.</div>
        )}
        {filtered.map((alarm,i)=>{
          const s=SEV_META[alarm.severity];
          const src=SRC_META[alarm.source];
          const pri=ALARM_PRI_META[alarm.priority];
          const isAcked=ackedMap[alarm.id];
          const isExp=expanded===alarm.id;
          return (
            <div key={alarm.id} style={{ borderBottom:i<filtered.length-1?'1px solid var(--border)':'none', opacity:alarm.resolved?0.6:1 }}>
              <div onClick={()=>setExpanded(isExp?null:alarm.id)}
                style={{ display:'grid', gridTemplateColumns:'4px 1fr auto', cursor:'pointer', background:isExp?'var(--surface)':'' }}
                onMouseEnter={e=>{ if(!isExp) e.currentTarget.style.background='var(--surface)'; }}
                onMouseLeave={e=>{ if(!isExp) e.currentTarget.style.background=''; }}>
                <div style={{ background:s.color, opacity:0.7 }}/>
                <div style={{ padding:'12px 16px' }}>
                  <div style={{ display:'flex', alignItems:'center', gap:6, marginBottom:4, flexWrap:'wrap' }}>
                    <span style={{ fontFamily:'var(--font-mono)', fontSize:10.5, color:s.color, fontWeight:600 }}>{alarm.code}</span>
                    <span style={{ fontSize:9, fontFamily:'var(--font-mono)', padding:'1px 5px', borderRadius:2, background:`${src.color}14`, color:src.color, border:`1px solid ${src.color}22` }}>{alarm.source}</span>
                    <span style={{ fontSize:9, fontFamily:'var(--font-mono)', padding:'1px 5px', borderRadius:2, background:s.bg, color:s.color, border:`1px solid ${s.color}22` }}>{s.label}</span>
                    {alarm.priority!=='—'&&<span style={{ fontSize:9, fontFamily:'var(--font-mono)', padding:'1px 5px', borderRadius:2, background:pri.bg, color:pri.color, border:`1px solid ${pri.color}22` }}>{alarm.priority}</span>}
                    <span style={{ fontSize:9, padding:'1px 6px', borderRadius:2, background:'var(--surface)', border:'1px solid var(--border)', color:'var(--text-muted)', fontFamily:'var(--font-mono)' }}>{alarm.category}</span>
                    <span style={{ fontFamily:'var(--font-mono)', fontSize:10, color:'var(--text-muted)' }}>· {alarm.machine}</span>
                  </div>
                  <div style={{ fontSize:13, color:'var(--text)', lineHeight:1.4 }}>{alarm.msg}</div>
                  {alarm.impact!=='—'&&!alarm.resolved&&<div style={{ fontFamily:'var(--font-mono)', fontSize:10.5, color:'var(--signal-warn)', marginTop:4 }}>📌 Etki: {alarm.impact}</div>}
                </div>
                <div style={{ padding:'12px 16px', display:'flex', flexDirection:'column', alignItems:'flex-end', gap:6, justifyContent:'center' }}>
                  <span style={{ fontFamily:'var(--font-mono)', fontSize:10, color:'var(--text-muted)', whiteSpace:'nowrap' }}>{alarm.date} · {alarm.time}</span>
                  {!alarm.resolved && (
                    <button onClick={e=>{e.stopPropagation();setAckedMap(m=>({...m,[alarm.id]:!m[alarm.id]}));}}
                      style={{ fontSize:9.5, fontFamily:'var(--font-mono)', padding:'2px 8px', borderRadius:3, border:`1px solid ${isAcked?'var(--border)':s.color}`, background:'transparent', color:isAcked?'var(--text-muted)':s.color, cursor:'pointer', textTransform:'uppercase', letterSpacing:'0.04em', whiteSpace:'nowrap' }}>
                      {isAcked ? '✓ Onaylandı' : 'Onayla'}
                    </button>
                  )}
                </div>
              </div>
              {isExp && (
                <div style={{ padding:'12px 20px 14px', background:'var(--surface)', borderTop:'1px solid var(--border)' }}>
                  <div style={{ fontSize:13, color:'var(--text-secondary)', lineHeight:1.65, marginBottom:10 }}>{alarm.detail}</div>
                  {alarm.impact!=='—'&&!alarm.resolved&&(
                    <div style={{ display:'flex', gap:12, flexWrap:'wrap' }}>
                      <div style={{ padding:'8px 12px', background:'var(--bg-elevated)', border:'1px solid var(--border)', borderRadius:r-4, display:'flex', alignItems:'center', gap:6 }}>
                        <span style={{ fontFamily:'var(--font-mono)', fontSize:10, color:'var(--text-muted)' }}>Kaynak:</span>
                        <span style={{ fontFamily:'var(--font-mono)', fontSize:11, color:src.color, fontWeight:500 }}>{alarm.source}</span>
                      </div>
                      <div style={{ padding:'8px 12px', background:'var(--bg-elevated)', border:'1px solid var(--border)', borderRadius:r-4, display:'flex', alignItems:'center', gap:6 }}>
                        <span style={{ fontFamily:'var(--font-mono)', fontSize:10, color:'var(--text-muted)' }}>Öncelik:</span>
                        <span style={{ fontFamily:'var(--font-mono)', fontSize:11, color:pri.color, fontWeight:500 }}>{alarm.priority}</span>
                      </div>
                      <div style={{ padding:'8px 12px', background:'var(--bg-elevated)', border:'1px solid var(--border)', borderRadius:r-4, display:'flex', alignItems:'center', gap:6 }}>
                        <span style={{ fontFamily:'var(--font-mono)', fontSize:10, color:'var(--text-muted)' }}>Tahmini Etki:</span>
                        <span style={{ fontFamily:'var(--font-mono)', fontSize:11, color:'var(--signal-warn)', fontWeight:500 }}>{alarm.impact}</span>
                      </div>
                    </div>
                  )}
                </div>
              )}
            </div>
          );
        })}
      </div>
    </div>
  );
};

Object.assign(window, { PageAlarms: AlarmsPage });
