from os import listdir
from os.path import isfile, join
from typing import BinaryIO
import xmltodict
from functools import reduce

from src.config import settings


def save_file(file: BinaryIO, path):
    """
    Saves file to selected path
    :param file: file to save
    :param path: path
    :return: None
    """
    file.write(path)
    file.close()


def load_and_conc_xml(xml_file):
    """
    Reads, removes \n and concats xml to one string
    :param xml_file: file to concat
    :return: processed xml formatted string
    """
    with open(xml_file, "r") as file_read:
        data = xmltodict.parse(file_read.read())
    return data


def read_logs(context):
    logging_directory = settings.logging_dir
    logs = [f for f in listdir(logging_directory) if isfile(join(logging_directory, f))]
    for log in logs:
        parts = log.split(" - ")
        date_time = parts[0]
        log_context = parts[1]
        entry = parts[3]
        if log_context != context:
            continue
        yield date_time, entry
