from envs.monkey_zoo.blackbox.analyzers.analyzer import Analyzer
from envs.monkey_zoo.blackbox.analyzers.analyzer_log import AnalyzerLog


class CommunicationAnalyzer(Analyzer):
    def __init__(self, island_client, machine_ips):
        self.island_client = island_client
        self.machine_ips = machine_ips
        self.log = AnalyzerLog(self.__class__.__name__)

    def analyze_test_results(self):
        self.log.clear()
        all_monkeys_communicated = True
        for machine_ip in self.machine_ips:
            if not self.did_monkey_communicate_back(machine_ip):
                self.log.add_entry("Monkey from {} didn't communicate back".format(machine_ip))
                all_monkeys_communicated = False
            else:
                self.log.add_entry("Monkey from {} communicated back".format(machine_ip))
        return all_monkeys_communicated

    def did_monkey_communicate_back(self, machine_ip):
        query = {"ip_addresses": {"$elemMatch": {"$eq": machine_ip}}}
        return len(self.island_client.find_monkeys_in_db(query)) > 0