import datetime


def compute_resource_usage(data):
    """ Computes MonitorData.used based on related monitors """
    resource = data.resource
    result = 0
    has_result = False
    today = datetime.date.today()
    for dataset in data.get_monitor_datasets():
        if resource.period == resource.MONTHLY_AVG:
            last = dataset.latest()
            epoch = datetime(
                year=today.year,
                month=today.month,
                day=1,
                tzinfo=timezone.utc
            )
            total = (last.created_at-epoch).total_seconds()
            ini = epoch
            for data in dataset:
                slot = (data.created_at-ini).total_seconds()
                result += data.value * slot/total
                ini = data.created_at
        elif resource.period in (resource.MONTHLY_SUM, resource.LAST):
            # FIXME Aggregation of 0s returns None! django bug?
            # value = dataset.aggregate(models.Sum('value'))['value__sum']
            values = dataset.values_list('value', flat=True)
            if values:
                has_result = True
                result += sum(values)
        else:
            raise NotImplementedError("%s support not implemented" % data.period)
    return float(result)/resource.get_scale() if has_result else None