def stock_update(stkFn, ordFn, date):
    stkD = gen_stkD(stkFn)
    np, ne = upd_stkD(stkD, ordFn, date)
    write_stkD(stkD, date)
    return np, ne

def gen_stkD(stkFn):
    stkD = {}
    with open(stkFn, 'r') as stkF:
        for line in stkF:
            pic, q, date = line.strip().split(',')
            stkD[pic] = (float(q), date)
    return stkD
    
def upd_stkD(stkD, ordFn, date):
    np = ne = 0
    with open(ordFn, 'r') as ordF, open('errors'+'-'+date+'.txt', 'w') as errF:
        for line in ordF:
            lineL = line.strip().split(',')
            if len(lineL) != 2:
                errF.write(compose('OrderError: ', lineL))
                ne += 1
            else:
                pin, qoS = lineL
                if pin not in stkD:
                    errF.write(compose('ProdNotFoundError: ', lineL))
                    ne += 1
                else:
                    q = stkD[pin][0]
                    qo = float(qoS)
                    if q >= qo:
                        stkD[pin] = (q-qo, date)
                        np += 1
                    else:
                        errF.write(compose('StockNotEnoughError: ', [pin, str(q), qoS]))
                        ne += 1
    return np, ne

def write_stkD(stkD, date):
    with open('stocks'+'-'+date+'.txt', 'w') as stkF:
        for pin, value in stkD.items():
            q, date = value
            stkF.write(compose('', [pin, str(q), date]))

def compose(mis, ls):
    return mis + ','.join(ls) + '\n'

# -----------------------------------------------------------------------------

def gen_prdD(prdFn):
    prdD = {}
    with open(prdFn, 'r') as prdF:
        prdF.readline()
        for line in prdF:
            lineL = line.strip().split(',')
            prdD[lineL[0]] = tuple(lineL[1:])
    return prdD
