#!/bin/sh

alterator_api_version=1
. alterator-sh-functions
. alterator-net-functions

write_string_params(){
  while read key val; do
    write_string_param "${key%:}" "${val}"
  done
}

fs=""
uid=""
on_message()
{
  case "$in_action" in
    list)
      case "$in__objects" in
        fs)    alterator-quota listfs | write_enum ;;
        users) alterator-quota list   | write_enum ;;
      esac
    ;;
    read)
      in_fs="${in_fs:-$fs}"
      in_uid="${in_uid:-$uid}"
      [ -n "$in_fs" -a -n "$in_uid" ] || return
      [ "$in_fs" != "#f" -a "$in_uid" != "#f" ] || return
      set_locale
      local ans="$( ( alterator-quota read -f "$in_fs" -u "$in_uid" |\
                   write_string_params ) 2>&1)"
      ans="${ans#alterator-quota: }"
      ans="${ans#Error: }"
      [ -z "$ans" ] || write_error "$ans"
    ;;
    write)
      uid="$in_uid"
      fs="$in_fs"
      set_locale
      local ans="$(alterator-quota write -f "$in_fs" -u "$in_uid" \
                   -q"${in_b_soft:-0},${in_b_hard:-0},${in_i_soft:-0},${in_i_hard:-0}" 2>&1)"
      ans="${ans#alterator-quota: }"
      ans="${ans#Error: }"
      [ -z "$ans" ] || write_error "$ans"
    ;;
  esac
}

message_loop
