from dataclasses import dataclass
from typing import List

from colorama import Fore
from yaml import FullLoader, load_all

from common import print_message


@dataclass
class DeploymentFile(object):
    content: str
    path: str


def get_deployment_files(project, files_path) -> List[DeploymentFile]:
    files = []
    for path in files_path:
        project_file = project.files.get(file_path=path["filename"], ref="develop")
        loaded_yaml_content = next(load_all(project_file.decode(), Loader=FullLoader))
        files.append(DeploymentFile(content=loaded_yaml_content, path=path["filename"]))
    return files


def get_deployment_files_from_tree(project, files) -> List[DeploymentFile]:
    deployment_files = []

    for file in files:
        file_path = file.get("path")

        if not file_path:
            continue

        if not any(ext in file_path for ext in [".yaml", ".yml"]):
            continue

        try:
            project_file = project.files.get(file_path=file_path, ref="develop")
            content = project_file.decode()

            if not content.strip():
                continue

            loaded_yaml = list(load_all(content, Loader=FullLoader))

            if not loaded_yaml:
                continue

            deployment_files.append(
                DeploymentFile(content=loaded_yaml[0], path=file_path)
            )

        except Exception:
            continue

    return deployment_files
