#!/usr/bin/env ruby
def save(model_name)
  require 'date'

  models_dir = 'models'
  model_path = File.join(models_dir, model_name)
  if not File.exists? model_path then
    return false
  end

  episode_count = (File.read File.join(model_path, 'episodes_trained')).to_i

  puts "Found model #{model_name} with episodes #{episode_count} trained!"

  file_name = "model-#{model_name}-#{episode_count}-#{Time.now.strftime('%Y%m%d-%H%M%S')}.tar.gz"
  save_path = File.join(models_dir, 'saves', file_name)
  puts "Saving to #{save_path}"
  
  system("tar", "-cvzf", save_path, "-C", models_dir, model_name)

  return true
end

def train(model, episodes)
  system("python3", "main.py", "--train", "--model", model, "--episodes", episodes.to_s)
end

def evaluate(model, episodes, method)
  system("python3", "main.py", "--eval" , "--model", model, "--episodes", episodes.to_s, "--eval-methods", method)
end

model = ARGV[0]

if model.nil? then raise "no model specified" end

while true do
  save model
  train model, 1000
  save model
  train model, 1000
  3.times do
    evaluate model, 250, "pubeval"
  end
  3.times do
    evaluate model, 250, "dumbeval"
  end
end