#!/usr/bin/env ruby
MODELS_DIR = 'models'

def save(model_name)
  require 'date'

  model_path = File.join(MODELS_DIR, model_name)

  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)
end

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

def force_train(model, episodes)
  system("python3", "main.py", "--train", "--force-creation", "--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

if not File.exists? File.join(MODELS_DIR, model) then
  force_train model, 10
  save model
  3.times do
    evaluate model, 250, "pubeval"
  end
  3.times do
    evaluate model, 250, "dumbeval"
  end
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

while true do
  save model
  train model, 500
  5.times do
    evaluate model, 250, "pubeval"
  end
  5.times do
    evaluate model, 250, "dumbeval"
  end
end