class SauceWhisk::Jobs

def self.all

def self.all
  all_jobs = JSON.parse get
  all_jobs.map {|job| Job.new(job)}
end

def self.change_status(job_id, status)

def self.change_status(job_id, status)
  put job_id, {"passed" => status}.to_json
rescue StandardError => e
  SauceWhisk.logger.error "Unable to change_status for #{job_id} to #{status}\nReason: #{e.to_s}"
end

def self.delete_job(job_id)

def self.delete_job(job_id)
  delete "#{job_id}"
end

def self.fail_job(job_id)

def self.fail_job(job_id)
  change_status(job_id, false)
end

def self.fetch(job_id)

def self.fetch(job_id)
  job_hash = {}
  begin
    job_hash = JSON.parse(get job_id)
    assets = job_assets job_id
    job_hash.merge! assets
  rescue SauceWhisk::JobNotComplete
    # Always succeed
  end
  return Job.new(job_hash)
end

def self.fetch!(job_id)

def self.fetch!(job_id)
  job_hash = JSON.parse(get job_id)
  assets = job_assets job_id
  job_hash.merge! assets
  Job.new job_hash
end

def self.fetch_asset(job_id, asset)

def self.fetch_asset(job_id, asset)
  asset = get "#{job_id}/assets/#{asset}"
end

def self.job_assets(job_id)

def self.job_assets(job_id)
  assets = JSON.parse get "#{job_id}/assets"
  screenshots = assets["screenshots"]
  {"screenshot_urls" => screenshots}
rescue RestClient::BadRequest => e
  if (/Job hasn't finished running/.match e.response)
    SauceWhisk.logger.debug("Exception fetching assets: #{e.message} - #{e.response}")
    raise SauceWhisk::JobNotComplete
  else
    SauceWhisk.logger.error("Exception fetching assets: #{e.message} - #{e.response}")
    raise e
  end
end

def self.pass_job(job_id)

def self.pass_job(job_id)
  change_status(job_id, true)
end

def self.resource

def self.resource
  "#{SauceWhisk.username}/jobs"
end

def self.save(job)

def self.save(job)
  fields_to_save = job.updated_fields.each_with_object(Hash.new) do |field, hsh|
    if field == :custom_data
      hsh[:'custom-data'] = job.send(field.to_s)
    else
      hsh[field] = job.send(field.to_s)
    end
  end
  put job.id, fields_to_save.to_json
end

def self.stop(job_id)

def self.stop(job_id)
  put "#{job_id}/stop", {}
end