from modules.software_base import WorkflowRunnerBase
import os

class DownsampleRunner(WorkflowRunnerBase):
    def __init__(self, logger, manifest_list, input_path, output_path="", additional_args="", threads=2, stepname="", mode=None):
        super().__init__(
            logger=logger,
            manifest_list=manifest_list,
            input_path=input_path,
            output_path=output_path,
            additional_args=additional_args,
            threads=threads,
            stepname=stepname,
            software_name="downsample_bam.py",
            unneeded_args=["-i", "-o", "-t", "--in", "--out", "--threads"],
            output_type="bam",
            rescan_output=True,
            mode=mode
        )

    def find_input_files(self,prev_step_files):
        self.logger.info(prev_step_files, self.input_path, self.output_path, self.manifest_list)  
        for line in prev_step_files:

            self.input_file_list.append({
                "id": line['id'],
                "input1": line["output1"],
                "input2": None,
                "output1": f"{os.path.join(self.output_path, line['id'])}.{self.output_type}",
                "output2": None,
            })
        if self.leaf:
            return prev_step_files
        else:
            return None

    def build_command_queue(self):
        for item in self.input_file_list:
            file_manifest = [mandata for mandata in self.manifest_list if mandata['id'] == item['id']][0]

            # if the sample requires downsampling
            if file_manifest['downsample'] == "true" or file_manifest['downsample'] == True:
                cmd = [
                    self.software_name,
                    f"--in {item['input1']}",
                    f"--out {item['output1']}",
                    f"--threads {self.threads}",
                    self.additional_args
                ]
                self.command_queue.append(" ".join(cmd))

            # otherwise just copy it
            else:
                cmd = [
                    "cp",
                    item['input1'],
                    item['output1']
                ]
                self.command_queue.append(" ".join(cmd))
