require_relative "../rest_base"
require_relative "../rest_error_response"
require "ffi_yajl" unless defined?(FFI_Yajl)

module ChefZero
  module Endpoints
    # /sandboxes/ID
    class SandboxEndpoint < RestBase
      def put(request)
        existing_sandbox = FFI_Yajl::Parser.parse(get_data(request))
        existing_sandbox["checksums"].each do |checksum|
          unless exists_data?(request, request.rest_path[0..1] + ["file_store", "checksums", checksum])
            raise RestErrorResponse.new(503, "Checksum not uploaded: #{checksum}")
          end
        end
        delete_data(request)
        json_response(200, {
          guid: request.rest_path[3],
          name: request.rest_path[3],
          checksums: existing_sandbox["checksums"],
          create_time: existing_sandbox["create_time"],
          is_completed: true,
        })
      end
    end
  end
end
