/* Shared sensor catalog for shell and preferences. */
export const sensorCatalog = {
    'temperature' : { 'icon': 'temperature-symbolic.svg', colorFormats: ['temp'] },
        'voltage' : { 'icon': 'voltage-symbolic.svg' },
            'fan' : { 'icon': 'fan-symbolic.svg', colorFormats: ['fan'] },
         'memory' : { 'icon': 'memory-symbolic.svg', colorFormats: ['percent'] },
      'processor' : { 'icon': 'cpu-symbolic.svg', colorFormats: ['percent'] },
         'system' : { 'icon': 'system-symbolic.svg', colorFormats: ['load'] },
        'network' : { 'icon': 'network-symbolic.svg',
                   'icon-rx': 'network-download-symbolic.svg',
                   'icon-tx': 'network-upload-symbolic.svg',
                   'icon-ad': '../flags/1x1/ad.svg',
                   'icon-ae': '../flags/1x1/ae.svg',
                   'icon-af': '../flags/1x1/af.svg',
                   'icon-ag': '../flags/1x1/ag.svg',
                   'icon-ai': '../flags/1x1/ai.svg',
                   'icon-al': '../flags/1x1/al.svg',
                   'icon-am': '../flags/1x1/am.svg',
                   'icon-ao': '../flags/1x1/ao.svg',
                   'icon-ar': '../flags/1x1/ar.svg',
                   'icon-at': '../flags/1x1/at.svg',
                   'icon-au': '../flags/1x1/au.svg',
                   'icon-aw': '../flags/1x1/aw.svg',
                   'icon-ax': '../flags/1x1/ax.svg',
                   'icon-az': '../flags/1x1/az.svg',
                   'icon-ba': '../flags/1x1/ba.svg',
                   'icon-bb': '../flags/1x1/bb.svg',
                   'icon-bd': '../flags/1x1/bd.svg',
                   'icon-be': '../flags/1x1/be.svg',
                   'icon-bf': '../flags/1x1/bf.svg',
                   'icon-bg': '../flags/1x1/bg.svg',
                   'icon-bh': '../flags/1x1/bh.svg',
                   'icon-bi': '../flags/1x1/bi.svg',
                   'icon-bj': '../flags/1x1/bj.svg',
                   'icon-bl': '../flags/1x1/bl.svg',
                   'icon-bm': '../flags/1x1/bm.svg',
                   'icon-bn': '../flags/1x1/bn.svg',
                   'icon-bo': '../flags/1x1/bo.svg',
                   'icon-bq': '../flags/1x1/bq.svg',
                   'icon-br': '../flags/1x1/br.svg',
                   'icon-bs': '../flags/1x1/bs.svg',
                   'icon-bt': '../flags/1x1/bt.svg',
                   'icon-bv': '../flags/1x1/bv.svg',
                   'icon-bw': '../flags/1x1/bw.svg',
                   'icon-by': '../flags/1x1/by.svg',
                   'icon-bz': '../flags/1x1/bz.svg',
                   'icon-ca': '../flags/1x1/ca.svg',
                   'icon-cc': '../flags/1x1/cc.svg',
                   'icon-cd': '../flags/1x1/cd.svg',
                   'icon-cf': '../flags/1x1/cf.svg',
                   'icon-cg': '../flags/1x1/cg.svg',
                   'icon-ch': '../flags/1x1/ch.svg',
                   'icon-ci': '../flags/1x1/ci.svg',
                   'icon-ck': '../flags/1x1/ck.svg',
                   'icon-cl': '../flags/1x1/cl.svg',
                   'icon-cm': '../flags/1x1/cm.svg',
                   'icon-cn': '../flags/1x1/cn.svg',
                   'icon-co': '../flags/1x1/co.svg',
                   'icon-cr': '../flags/1x1/cr.svg',
                   'icon-cu': '../flags/1x1/cu.svg',
                   'icon-cv': '../flags/1x1/cv.svg',
                   'icon-cw': '../flags/1x1/cw.svg',
                   'icon-cx': '../flags/1x1/cx.svg',
                   'icon-cy': '../flags/1x1/cy.svg',
                   'icon-cz': '../flags/1x1/cz.svg',
                   'icon-de': '../flags/1x1/de.svg',
                   'icon-dj': '../flags/1x1/dj.svg',
                   'icon-dk': '../flags/1x1/dk.svg',
                   'icon-dm': '../flags/1x1/dm.svg',
                   'icon-do': '../flags/1x1/do.svg',
                   'icon-dz': '../flags/1x1/dz.svg',
                   'icon-ec': '../flags/1x1/ec.svg',
                   'icon-ee': '../flags/1x1/ee.svg',
                   'icon-eg': '../flags/1x1/eg.svg',
                   'icon-eh': '../flags/1x1/eh.svg',
                   'icon-er': '../flags/1x1/er.svg',
                   'icon-es': '../flags/1x1/es.svg',
                   'icon-et': '../flags/1x1/et.svg',
                   'icon-eu': '../flags/1x1/eu.svg',
                   'icon-fi': '../flags/1x1/fi.svg',
                   'icon-fj': '../flags/1x1/fj.svg',
                   'icon-fk': '../flags/1x1/fk.svg',
                   'icon-fm': '../flags/1x1/fm.svg',
                   'icon-fo': '../flags/1x1/fo.svg',
                   'icon-fr': '../flags/1x1/fr.svg',
                   'icon-ga': '../flags/1x1/ga.svg',
                   'icon-gb': '../flags/1x1/gb.svg',
                   'icon-gd': '../flags/1x1/gd.svg',
                   'icon-ge': '../flags/1x1/ge.svg',
                   'icon-gf': '../flags/1x1/gf.svg',
                   'icon-gg': '../flags/1x1/gg.svg',
                   'icon-gh': '../flags/1x1/gh.svg',
                   'icon-gi': '../flags/1x1/gi.svg',
                   'icon-gl': '../flags/1x1/gl.svg',
                   'icon-gm': '../flags/1x1/gm.svg',
                   'icon-gn': '../flags/1x1/gn.svg',
                   'icon-gp': '../flags/1x1/gp.svg',
                   'icon-gq': '../flags/1x1/gq.svg',
                   'icon-gr': '../flags/1x1/gr.svg',
                   'icon-gs': '../flags/1x1/gs.svg',
                   'icon-gt': '../flags/1x1/gt.svg',
                   'icon-gu': '../flags/1x1/gu.svg',
                   'icon-gw': '../flags/1x1/gw.svg',
                   'icon-gy': '../flags/1x1/gy.svg',
                   'icon-hk': '../flags/1x1/hk.svg',
                   'icon-hm': '../flags/1x1/hm.svg',
                   'icon-hn': '../flags/1x1/hn.svg',
                   'icon-hr': '../flags/1x1/hr.svg',
                   'icon-ht': '../flags/1x1/ht.svg',
                   'icon-hu': '../flags/1x1/hu.svg',
                   'icon-id': '../flags/1x1/id.svg',
                   'icon-ie': '../flags/1x1/ie.svg',
                   'icon-il': '../flags/1x1/il.svg',
                   'icon-im': '../flags/1x1/im.svg',
                   'icon-in': '../flags/1x1/in.svg',
                   'icon-io': '../flags/1x1/io.svg',
                   'icon-iq': '../flags/1x1/iq.svg',
                   'icon-ir': '../flags/1x1/ir.svg',
                   'icon-is': '../flags/1x1/is.svg',
                   'icon-it': '../flags/1x1/it.svg',
                   'icon-je': '../flags/1x1/je.svg',
                   'icon-jm': '../flags/1x1/jm.svg',
                   'icon-jo': '../flags/1x1/jo.svg',
                   'icon-jp': '../flags/1x1/jp.svg',
                   'icon-ke': '../flags/1x1/ke.svg',
                   'icon-kg': '../flags/1x1/kg.svg',
                   'icon-kh': '../flags/1x1/kh.svg',
                   'icon-ki': '../flags/1x1/ki.svg',
                   'icon-km': '../flags/1x1/km.svg',
                   'icon-kn': '../flags/1x1/kn.svg',
                   'icon-kp': '../flags/1x1/kp.svg',
                   'icon-kr': '../flags/1x1/kr.svg',
                   'icon-kw': '../flags/1x1/kw.svg',
                   'icon-ky': '../flags/1x1/ky.svg',
                   'icon-kz': '../flags/1x1/kz.svg',
                   'icon-la': '../flags/1x1/la.svg',
                   'icon-lb': '../flags/1x1/lb.svg',
                   'icon-lc': '../flags/1x1/lc.svg',
                   'icon-li': '../flags/1x1/li.svg',
                   'icon-lk': '../flags/1x1/lk.svg',
                   'icon-lr': '../flags/1x1/lr.svg',
                   'icon-ls': '../flags/1x1/ls.svg',
                   'icon-lt': '../flags/1x1/lt.svg',
                   'icon-lu': '../flags/1x1/lu.svg',
                   'icon-lv': '../flags/1x1/lv.svg',
                   'icon-ly': '../flags/1x1/ly.svg',
                   'icon-ma': '../flags/1x1/ma.svg',
                   'icon-mc': '../flags/1x1/mc.svg',
                   'icon-md': '../flags/1x1/md.svg',
                   'icon-me': '../flags/1x1/me.svg',
                   'icon-mf': '../flags/1x1/mf.svg',
                   'icon-mg': '../flags/1x1/mg.svg',
                   'icon-mh': '../flags/1x1/mh.svg',
                   'icon-mk': '../flags/1x1/mk.svg',
                   'icon-ml': '../flags/1x1/ml.svg',
                   'icon-mm': '../flags/1x1/mm.svg',
                   'icon-mn': '../flags/1x1/mn.svg',
                   'icon-mo': '../flags/1x1/mo.svg',
                   'icon-mp': '../flags/1x1/mp.svg',
                   'icon-mq': '../flags/1x1/mq.svg',
                   'icon-mr': '../flags/1x1/mr.svg',
                   'icon-ms': '../flags/1x1/ms.svg',
                   'icon-mt': '../flags/1x1/mt.svg',
                   'icon-mu': '../flags/1x1/mu.svg',
                   'icon-mv': '../flags/1x1/mv.svg',
                   'icon-mw': '../flags/1x1/mw.svg',
                   'icon-mx': '../flags/1x1/mx.svg',
                   'icon-my': '../flags/1x1/my.svg',
                   'icon-mz': '../flags/1x1/mz.svg',
                   'icon-na': '../flags/1x1/na.svg',
                   'icon-nc': '../flags/1x1/nc.svg',
                   'icon-ne': '../flags/1x1/ne.svg',
                   'icon-nf': '../flags/1x1/nf.svg',
                   'icon-ng': '../flags/1x1/ng.svg',
                   'icon-ni': '../flags/1x1/ni.svg',
                   'icon-nl': '../flags/1x1/nl.svg',
                   'icon-no': '../flags/1x1/no.svg',
                   'icon-np': '../flags/1x1/np.svg',
                   'icon-nr': '../flags/1x1/nr.svg',
                   'icon-nu': '../flags/1x1/nu.svg',
                   'icon-nz': '../flags/1x1/nz.svg',
                   'icon-om': '../flags/1x1/om.svg',
                   'icon-pa': '../flags/1x1/pa.svg',
                   'icon-pe': '../flags/1x1/pe.svg',
                   'icon-pf': '../flags/1x1/pf.svg',
                   'icon-pg': '../flags/1x1/pg.svg',
                   'icon-ph': '../flags/1x1/ph.svg',
                   'icon-pk': '../flags/1x1/pk.svg',
                   'icon-pl': '../flags/1x1/pl.svg',
                   'icon-pm': '../flags/1x1/pm.svg',
                   'icon-pn': '../flags/1x1/pn.svg',
                   'icon-pr': '../flags/1x1/pr.svg',
                   'icon-ps': '../flags/1x1/ps.svg',
                   'icon-pt': '../flags/1x1/pt.svg',
                   'icon-pw': '../flags/1x1/pw.svg',
                   'icon-py': '../flags/1x1/py.svg',
                   'icon-qa': '../flags/1x1/qa.svg',
                   'icon-re': '../flags/1x1/re.svg',
                   'icon-ro': '../flags/1x1/ro.svg',
                   'icon-rs': '../flags/1x1/rs.svg',
                   'icon-ru': '../flags/1x1/ru.svg',
                   'icon-rw': '../flags/1x1/rw.svg',
                   'icon-sa': '../flags/1x1/sa.svg',
                   'icon-sb': '../flags/1x1/sb.svg',
                   'icon-sc': '../flags/1x1/sc.svg',
                   'icon-sd': '../flags/1x1/sd.svg',
                   'icon-se': '../flags/1x1/se.svg',
                   'icon-sg': '../flags/1x1/sg.svg',
                   'icon-sh': '../flags/1x1/sh.svg',
                   'icon-si': '../flags/1x1/si.svg',
                   'icon-sj': '../flags/1x1/sj.svg',
                   'icon-sk': '../flags/1x1/sk.svg',
                   'icon-sl': '../flags/1x1/sl.svg',
                   'icon-sm': '../flags/1x1/sm.svg',
                   'icon-sn': '../flags/1x1/sn.svg',
                   'icon-so': '../flags/1x1/so.svg',
                   'icon-sr': '../flags/1x1/sr.svg',
                   'icon-ss': '../flags/1x1/ss.svg',
                   'icon-st': '../flags/1x1/st.svg',
                   'icon-sv': '../flags/1x1/sv.svg',
                   'icon-sx': '../flags/1x1/sx.svg',
                   'icon-sy': '../flags/1x1/sy.svg',
                   'icon-sz': '../flags/1x1/sz.svg',
                   'icon-tc': '../flags/1x1/tc.svg',
                   'icon-td': '../flags/1x1/td.svg',
                   'icon-tf': '../flags/1x1/tf.svg',
                   'icon-tg': '../flags/1x1/tg.svg',
                   'icon-th': '../flags/1x1/th.svg',
                   'icon-tj': '../flags/1x1/tj.svg',
                   'icon-tk': '../flags/1x1/tk.svg',
                   'icon-tl': '../flags/1x1/tl.svg',
                   'icon-tm': '../flags/1x1/tm.svg',
                   'icon-tn': '../flags/1x1/tn.svg',
                   'icon-to': '../flags/1x1/to.svg',
                   'icon-tr': '../flags/1x1/tr.svg',
                   'icon-tt': '../flags/1x1/tt.svg',
                   'icon-tv': '../flags/1x1/tv.svg',
                   'icon-tw': '../flags/1x1/tw.svg',
                   'icon-tz': '../flags/1x1/tz.svg',
                   'icon-ua': '../flags/1x1/ua.svg',
                   'icon-ug': '../flags/1x1/ug.svg',
                   'icon-um': '../flags/1x1/um.svg',
                   'icon-us': '../flags/1x1/us.svg',
                   'icon-uy': '../flags/1x1/uy.svg',
                   'icon-uz': '../flags/1x1/uz.svg',
                   'icon-va': '../flags/1x1/va.svg',
                   'icon-vc': '../flags/1x1/vc.svg',
                   'icon-ve': '../flags/1x1/ve.svg',
                   'icon-vg': '../flags/1x1/vg.svg',
                   'icon-vi': '../flags/1x1/vi.svg',
                   'icon-vn': '../flags/1x1/vn.svg',
                   'icon-vu': '../flags/1x1/vu.svg',
                   'icon-wf': '../flags/1x1/wf.svg',
                   'icon-ws': '../flags/1x1/ws.svg',
                   'icon-xk': '../flags/1x1/xk.svg',
                   'icon-ye': '../flags/1x1/ye.svg',
                   'icon-yt': '../flags/1x1/yt.svg',
                   'icon-za': '../flags/1x1/za.svg',
                   'icon-zm': '../flags/1x1/zm.svg',
                   'icon-zw': '../flags/1x1/zw.svg'
        },
        'storage' : { 'icon': 'storage-symbolic.svg' },
        'battery' : { 'icon': 'battery-symbolic.svg', colorFormats: ['percent'] },
            'gpu' : { 'icon': 'gpu-symbolic.svg', colorFormats: ['percent'] }
        };

export function sensorGroupFromType(type) {
    let group = (type || '').replace(/-group$/, '');
    if (group.startsWith('gpu'))
        return 'gpu';
    return group.replace(/#\d+$/, '');
}

export function colorSettingsKeys() {
    return Object.keys(sensorCatalog)
        .filter(group => sensorCatalog[group].colorFormats)
        .map(group => `${group}-colors`);
}

// GSettings key for threshold colors for a live sensor (shared by values + prefs).
export function colorsKeyForSensor(type, format) {
    // All temperatures share the temperature threshold UI, including GPU rows.
    if (format === 'temp')
        return 'temperature-colors';

    const group = sensorGroupFromType(type);
    const formats = sensorCatalog[group]?.colorFormats;
    if (formats && formats.includes(format))
        return `${group}-colors`;

    return null;
}

export function colorPageForSensor(type, format) {
    let key = colorsKeyForSensor(type, format);
    return key ? key.slice(0, -'-colors'.length) : null;
}
