import stat
import subprocess
from pathlib import Path

from colorama import Fore, Back, Style

from symconf.util import printc, color_text


class Runner:
    def run_script(
        self,
        script: str | Path,
    ):
        script_path = Path(script)

        if script_path.stat().st_mode & stat.S_IXUSR == 0:
            print(
                color_text("│", Fore.BLUE),
                color_text(
                    f'   > script "{script_path.name}" missing execute permissions, skipping',
                    Fore.RED + Style.DIM
                )
            )
            return

        print(
            color_text("│", Fore.BLUE),
            color_text(
                f' > running script "{script_path.name}"',
                Fore.BLUE
            )
        )

        output = subprocess.check_output(str(script_path), shell=True)

        if output:
            fmt_output = output.decode().strip().replace(
                '\n',
                f'\n{Fore.BLUE}{Style.NORMAL}│{Style.DIM}    '
            )
            print(
                color_text("│", Fore.BLUE),
                color_text(
                    f'   captured script output "{fmt_output}"',
                    Fore.BLUE + Style.DIM
                )
            )

        return output

    def run_many(
        self,
        script_list: list[str | Path],
    ):
        outputs = []
        for script in script_list:
            output = self.run_script(script)
            outputs.append(output)

        return outputs
