class Noah::App

  get '/watches/:name' do |name|
    w = Noah::Watcher.find_by_name(name)
    w.nil? ? (halt 404) : w.to_json
  end

  get '/watches/?' do
    w = Noah::Watcher.all.sort_by(:pattern)
    if w.size == 0
      halt 404
    else  
      w.to_json
    end 
  end

  put '/watches/?' do
    required_params = %w[endpoint pattern]
    data = JSON.parse(request.body.read)
    (data.keys.sort == required_params.sort) ? (pattern, endpoint = data['pattern'],data['endpoint']) : (raise "Missing Parameters")
    w = Noah::Watcher.create(:pattern => pattern, :endpoint => endpoint)
    if w.valid?
        w.save
        r = {"action" => "create", "result" => "success"}.merge(w.to_hash)
        r.to_json
    else
        raise "#{format_errors(w)}"
    end
  end

  delete '/watches/?' do
    required_params = %w[endpoint pattern]
    data = JSON.parse(request.body.read)
    (data.keys.sort == required_params.sort) ? (pattern, endpoint = data['pattern'],data['endpoint']) : (raise "Missing Parameters")
    w = Noah::Watcher.find(:pattern => pattern, :endpoint => endpoint).first
    if w.nil?
      halt 404
    else
      w.delete
      r = {"result" => "success", "action" => "delete"}.merge(w.to_hash)
      r.to_json
    end
  end

end