#!/usr/bin/env python
import os
from reprox import core, find_runs, submit_jobs, validate_run


def main(targets,
         cmt_version,
         context_kwargs,
         submit_only,
         skip_find,
         clear_logs,
         submit_kwargs,
         move_after_workflow
         ):
    core.log.info('Starting workflow')
    if not os.path.exists(core.runs_csv) or not skip_find:
        core.log.info("Doing data find")
        find_runs.find_data(
            targets=targets,
            exclude_from_invalid_cmt_version=cmt_version,
            context_kwargs=context_kwargs,
        )
    else:
        core.log.info(f"Using already-created runlist at {core.runs_csv}")
    core.log.info('Start jobs submission')
    submit_jobs.submit_jobs(
        targets=targets,
        clear_logs=clear_logs,
        submit_kwargs=submit_kwargs,
        submit_only=submit_only
    )
    if move_after_workflow:
        core.log.info(
            "Move all the data to the production folder in so far it's finished"
        )

        validate_run.move_all()
    else:
        core.log.info(f'Data sits at {core.config["context"]["base_folder"]}')
    core.log.info('All done, bye bye')


if __name__ == '__main__':
    args = core.parse_args(description='Run workflow to process data',
                           include_find_args=True,
                           include_processing_args=True,
                           include_workflow_args=True,
                           )
    core.log_versions()

    main(
        targets=args.targets,
        context_kwargs=dict(context=args.context,
                            package=args.package,
                            config_kwargs=args.context_kwargs,
                            **args.context_config_kwargs
                            ),
        cmt_version=args.cmt_version,
        submit_only=args.submit_only,
        skip_find=args.skip_find,
        clear_logs=args.clear_logs,
        submit_kwargs=dict(
            context=args.context,
            package=args.package,
            ram=int(args.ram),
            cpus_per_task=int(args.cpu),
            container=f'xenonnt-{args.tag}.simg',
            include_config=args.context_kwargs,
            context_config_kwargs=args.context_config_kwargs,
        ),
        move_after_workflow=args.move_after_workflow,
    )
    core.log.info('Workflow done, bye bye')
