# This file is part of Tryton.  The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from trytond.pool import Pool


def parcel_weight(parcel, carrier_uom, uom_field='unit'):
    pool = Pool()
    Uom = pool.get('product.uom')

    weight = 0
    for line in parcel:
        product = getattr(line, 'product', None)
        quantity = getattr(line, 'quantity', None)
        uom = getattr(line, uom_field, None)

        if not all([product, quantity, uom]):
            continue

        if product.weight is not None:
            internal_quantity = Uom.compute_qty(
                uom, quantity, product.default_uom, round=False)
            weight += Uom.compute_qty(
                product.weight_uom, internal_quantity * product.weight,
                carrier_uom, round=False)
        elif uom.category == carrier_uom.category:
            weight += Uom.compute_qty(uom, quantity, carrier_uom, round=False)
    return weight
