#!/router/bin/python
import copy


class CTRexStatsManager(object):

    def __init__(self, *args):
        for stat_type in args:
            # register stat handler for each stats type
            setattr(self, stat_type, CTRexStatsManager.CSingleStatsHandler())

    def __getitem__(self, item):
        stats_obj = getattr(self, item)
        if stats_obj:
            return stats_obj.get_stats()
        else:
            return None

    class CSingleStatsHandler(object):

        def __init__(self):
            self._stats = {}

        def update(self, obj_id, stats_obj):
            assert isinstance(stats_obj, CTRexStats)
            self._stats[obj_id] = stats_obj

        def get_stats(self, obj_id=None):
            if obj_id:
                return copy.copy(self._stats.pop(obj_id))
            else:
                return copy.copy(self._stats)


class CTRexStats(object):
    def __init__(self, **kwargs):
        for k, v in kwargs.items():
            setattr(self, k, v)


class CGlobalStats(CTRexStats):
    def __init__(self, **kwargs):
        super(CGlobalStats, self).__init__(kwargs)
        pass


class CPortStats(CTRexStats):
    def __init__(self, **kwargs):
        super(CPortStats, self).__init__(kwargs)
        pass


class CStreamStats(CTRexStats):
    def __init__(self, **kwargs):
        super(CStreamStats, self).__init__(kwargs)
        pass


if __name__ == "__main__":
    pass