"""Filter functions."""


def filter_content_return_one_of_type(
    content, namestartswith, filterfiltype, attr="name"
):
    """Only match 1 of the filter."""
    contents = []
    filetypefound = False
    for filename in content:
        if isinstance(filename, str):
            if filename.startswith(namestartswith):
                if filename.endswith(f".{filterfiltype}"):
                    if not filetypefound:
                        contents.append(filename)
                        filetypefound = True
                    continue
                else:
                    contents.append(filename)
        else:
            if getattr(filename, attr).startswith(namestartswith):
                if getattr(filename, attr).endswith(f".{filterfiltype}"):
                    if not filetypefound:
                        contents.append(filename)
                        filetypefound = True
                    continue
                else:
                    contents.append(filename)
    return contents


def find_first_of_filetype(content, filterfiltype, attr="name"):
    """Find the first of the file type."""
    filename = ""
    for _filename in content:
        if isinstance(_filename, str):
            if _filename.endswith(f".{filterfiltype}"):
                filename = _filename
                break
        else:
            if getattr(_filename, attr).endswith(f".{filterfiltype}"):
                filename = getattr(_filename, attr)
                break
    return filename


def get_first_directory_in_directory(content, dirname):
    """Return the first directory in dirname or None."""
    directory = None
    for path in content:
        if path.full_path.startswith(dirname) and path.full_path != dirname:
            if path.is_directory:
                directory = path.filename
                break
    return directory
