#!/usr/bin/ruby

require 'time'

usage = 'filter-traces <start_date> <end_date>'
start_date = ARGV[0] || abort("Expecting start_date: " + usage);
end_date = ARGV[1] || abort("Expecting end_date: " + usage);

def parse_time(s, start)
  if s =~ /^(\d+)(\.\d+)?$/
    return Time.at(s.to_f)
  else
    return Time.parse(s, start)
  end
end

start_date = parse_time(start_date, nil)
end_date = parse_time(end_date, start_date)
abort "end date can not be less than start date" if end_date < start_date


$stderr.puts "which-traces 0.1"
$stderr.puts "from: " + start_date.to_s
$stderr.puts "to: " + end_date.to_s


begin

  traces = $stdin.readlines

  traces.sort!
  pt = nil
  while traces.size > 0
    t = traces.shift.strip
    if File.basename(t) =~ /^[0-9]*.[0-9]*$/
      ts = Time.at(File.basename(t).to_f)
    else
      ts = File.mtime(t)
    end
    if ts >= start_date
      traces.unshift t
      break
    end
    pt = t
  end
  puts pt if pt != nil

  while traces.size > 0
    t = traces.shift.strip
    if File.basename(t) =~ /^[0-9]*.[0-9]*$/
      ts = Time.at(File.basename(t).to_f)
    else
      ts = File.mtime(t)
    end
    break if ts > end_date
    puts t
  end

rescue
  $stderr.puts "ERR: " + $!.to_s
  exit 1
end

