from contextlib import suppress

from flask import g, jsonify, request

from ereuse_devicehub.resources.action import schemas
from ereuse_devicehub.resources.action.models import (
    Action,
    Allocate,
    Live,
    ToPrepare,
    ToRepair,
)
from ereuse_devicehub.resources.device import models as m
from ereuse_devicehub.resources.metric.schema import Metric
from ereuse_devicehub.teal.resource import View


class MetricsView(View):
    def find(self, args: dict):

        metrics = {
            "allocateds": self.allocated(),
            "live": self.live(),
        }
        return jsonify(metrics)

    def allocated(self):
        # TODO @cayop we need uncomment when the pr/83 is approved
        # return m.Device.query.filter(m.Device.allocated==True, owner==g.user).count()
        return m.Device.query.filter(m.Device.allocated == True).count()

    def live(self):
        # TODO @cayop we need uncomment when the pr/83 is approved
        # devices = m.Device.query.filter(m.Device.allocated==True, owner==g.user)
        devices = m.Device.query.filter(m.Device.allocated == True)
        count = 0
        for dev in devices:
            live = allocate = None
            with suppress(LookupError):
                live = dev.last_action_of(Live)
            with suppress(LookupError):
                allocate = dev.last_action_of(Allocate)

            if not live:
                continue
            if allocate and allocate.created > live.created:
                continue
            count += 1

        return count