#!/usr/bin/env ruby

require 'rbbt-util'
require 'rbbt/util/simpleopt'
require 'rbbt/hpc'

#$0 = "rbbt #{$previous_commands*""} #{ File.basename(__FILE__) }" if $previous_commands

options = SOPT.setup <<EOF

Queue a job in Marenostrum

$ rbbt slurm tail <directory> [options] 

-h--help Print this help
-d--done Done jobs only
-e--error Error jobs only
-a--aborted SLURM aboted jobs
-r--running Running jobs only
-q--queued Queued jobs only
-j--job* Job ids
-s--search* Regular expression
-t--tail* Show the last lines of the STDERR
-p--progress Report progress of job and the dependencies
-SBP--sbatch_parameters show sbatch parameters
-PERF--procpath_performance show Procpath performance summary
-sacct--sacct_peformance show sacct performance summary
-bs--batch_system* Batch system to use: auto, lsf, slurm (default is auto-detect)
EOF

if options[:help]
 if defined? rbbt_usage
  rbbt_usage 
 else
  puts SOPT.doc
 end
 exit 0
end

batch_system = options.delete :batch_system
batch_system ||= 'auto'

HPC::BATCH_MODULE = case batch_system.to_s.downcase
               when 'slurm'
                 HPC::SLURM
               when 'lsf'
                 HPC::LSF
               when 'auto'
                 case $previous_commands.last
                 when 'slurm'
                   HPC::SLURM
                 when 'lsf'
                   HPC::LSF
                 else
                   case Rbbt::Config.get(:batch_system, :batch, :batch_system, :hpc, :HPC, :BATCH).to_s.downcase
                   when 'slurm'
                     HPC::SLURM
                   when 'lsf'
                     HPC::LSF
                   else
                     case ENV["BATCH_SYSTEM"].to_s.downcase
                     when 'slurm'
                       HPC::SLURM
                     when 'lsf'
                       HPC::LSF
                     end
                   end
                 end
               end

raise ParameterException.new("Could not detect batch_system: #{Misc.fingerprint batch_system}") if HPC::BATCH_MODULE.nil?

directory = ARGV.shift

raise ParameterException if directory.nil?

directory = File.dirname(directory) unless File.directory?(directory)

require 'rbbt/hpc/slurm'

HPC::BATCH_MODULE.follow_job directory, true