##############################################################################
# Copyright (c) 2017 ZTE Corp and others.
#
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################


class StubTestInstall():
    def __init__(self):
        pass

    def install(self, **cluster_meta):
        self.cluster_meta = cluster_meta


class StubTestHost():
    def __init__(self, id, name, cluster_id, interfaces):
        self.id = id
        self.name = name
        self.cluster_id = cluster_id
        self.interfaces = interfaces
        self.metadata = None

    def to_dict(self):
        return {'id': self.id, 'name': self.name, 'cluster_id': self.cluster_id,
                'interfaces': self.interfaces}


class StubTestHosts():
    def __init__(self):
        self.hosts = []

    def add(self, host):
        self.hosts.append(host)

    def get(self, id):
        for host in self.hosts:
            if host.id == id:
                return host
        return None

    def list(self):
        return self.hosts

    def update(self, host_id, **metadata):
        for host in self.hosts:
            if host.id == host_id:
                host.metadata = metadata


class StubTestCluster():
    def __init__(self, id, name):
        self.id = id
        self.name = name


class StubTestClusters():
    def __init__(self):
        self.clusters = []

    def add(self, cluster):
        self.clusters.append(cluster)

    def get(self, id):
        for cluster in self.clusters:
            if cluster.id == id:
                return cluster.name
        return None

    def list(self):
        return self.clusters


class StubTestNet():
    def __init__(self, id, name, cluster_id, **metadata):
        self.id = id
        self.name = name
        self.cluster_id = cluster_id
        self.metadata = metadata


class StubTestNetworks():
    def __init__(self):
        self.networks = []

    def add(self, net):
        self.networks.append(net)

    def list(self, **filter):
        networks = []
        if filter:
            filter_item = filter.get('filters')
            for net in self.networks:
                cluster_id_is_match = False
                if filter_item.get('cluster_id'):
                    if filter_item.get('cluster_id') == net.cluster_id:
                        cluster_id_is_match = True
                else:
                    cluster_id_is_match = True
                if cluster_id_is_match is True:
                    networks.append(net)
        return networks

    def update(self, network_id, **network_meta):
        for net in self.networks:
            if net.id == network_id:
                net.metadata = network_meta


class StubTestRole():
    def __init__(self, id, name, cluster_id):
        self.id = id
        self.name = name
        self.cluster_id = cluster_id
        self.metadata = None


class StubTestRoles():
    def __init__(self):
        self.roles = []

    def add(self, role):
        self.roles.append(role)

    def list(self, **filter):
        roles = []
        if filter:
            filter_item = filter.get('filters')
            for role in self.roles:
                cluster_id_is_match = False
                if filter_item.get('cluster_id'):
                    if filter_item.get('cluster_id') == role.cluster_id:
                        cluster_id_is_match = True
                else:
                    cluster_id_is_match = True
                if cluster_id_is_match is True:
                    roles.append(role)
        return roles

    def update(self, role_id, **meta):
        for role in self.roles:
            if role.id == role_id:
                role.metadata = meta


class StubTestDisks():
    def __init__(self):
        self.disks = []

    def service_disk_add(self, **metadata):
        self.disks.append(metadata)


class StubTestClient():
    def __init__(self):
        self.install = StubTestInstall()
        self.hosts = StubTestHosts()
        self.networks = StubTestNetworks()
        self.clusters = StubTestClusters()
        self.roles = StubTestRoles()
        self.disk_array = StubTestDisks()