def solargen_extract(nf):
    l = []
    with open(nf, 'r') as f:
        for lin in f:
            on, llin = lin_extract(lin)
            if on:
                l.append(llin)
    return l

def lin_extract(lin):
    llin = lin.strip().split(';')
    if llin[2] == 'on':
        llout = [llin[0]]
        for mea in llin[3:]:
            if mea != '*':
                llout.append(float(mea))
        return True, llout
    else:
        return False, []
    
def solargen_sum(sgL):
    d = {}
    for gL in sgL:
        sumea = sum(gL[1:])
        nmea = len(gL)-1
        g = gL[0]
        if g not in d:
            d[g] = [sumea, nmea]
        else:
            d[g][0] += sumea
            d[g][1] += nmea
    return d

def solargen_sort(d):
    l = sorted(d.items(), key=lambda x: (x[1][0]//x[1][1], -x[1][1], x[1][0]), reverse=True)
    lsol = []
    for g in l:
        lsol.append( (g[0], round(g[1][0]/g[1][1], 3), g[1][0], g[1][1]) )
    return lsol

def solargen_sort2(d):
    lsol = []
    for g, l in d.items():
        total, n = l
        lsol.append( (g, round(total/n, 3), total, n) )
    lsol.sort(reverse=True, key=lambda x: (int(x[1]), -x[3], x[2]))
    return lsol

def solargen_write(l, filename):
    n = 0
    with open(filename, 'w') as f:
        for g, mean, sumea, nmea in l:
            llin = [g, str(mean), str(sumea), str(nmea)]
            f.write(';'.join(llin) + '\n')
            n += 1
    return n
