-module(rest_users).
-compile({parse_transform, rest}).

-export([init/0, populate/1, new/0, exists/1, get/0, get/1, post/1, delete/1]).
-export([keys_allowed/1]).


-record(user, {id, cn, name, type}).
-rest_record(user).

keys_allowed(Keys) ->
  Allow = [<<"id">>, <<"test">>],
  lists:all(fun(X) ->
    lists:member(X, Allow)
  end, Keys).

new()                -> #user{}.
init()               -> ets:new(rest_users, [public, named_table, {keypos, #user.id}]).
populate(Users)      -> ets:insert(rest_users, Users).

exists(Id)           ->
  X = ets:member(rest_users, erlang:binary_to_list(Id)),
  io:format("Member: ~p~n", [X]),
  X.

get()                -> ets:tab2list(rest_users).

get(Id)              ->
  [U] = ets:lookup(rest_users, erlang:binary_to_list(Id)),
  io:format("User: ~p~n", [U]),
  U.

delete(Id)           -> ets:delete(rest_users, erlang:binary_to_list(Id)).
post(#user{} = User) -> ets:insert(rest_users, User);
post(Data)           -> post(from_json(Data, #user{})).