import logging
import os

from bson import ObjectId

LOGGER = logging.getLogger(__name__)


class MonkeyLog(object):
    def __init__(self, monkey, log_dir_path):
        self.monkey = monkey
        self.log_dir_path = log_dir_path

    def download_log(self, island_client):
        log = island_client.find_log_in_db({'monkey_id': ObjectId(self.monkey['id'])})
        if not log:
            LOGGER.error("Log for monkey {} not found".format(self.monkey['ip_addresses'][0]))
            return False
        else:
            self.write_log_to_file(log)
            return True

    def write_log_to_file(self, log):
        with open(self.get_log_path_for_monkey(self.monkey), 'w') as log_file:
            log_file.write(MonkeyLog.parse_log(log))

    @staticmethod
    def parse_log(log):
        log = log.strip('"')
        log = log.replace("\\n", "\n ")
        return log

    @staticmethod
    def get_filename_for_monkey_log(monkey):
        return "{}.txt".format(monkey['ip_addresses'][0])

    def get_log_path_for_monkey(self, monkey):
        return os.path.join(self.log_dir_path, MonkeyLog.get_filename_for_monkey_log(monkey))