inherit "std/thing";

#include <properties.h>
#include <language.h>
#include <config.h>
#include <news.h>
#include <defines.h>

#define UA PL->_unparsed_args()

protected void create()
{
  string str;
  if (!clonep(this_object())) return;
  ::create();
  SetProp(P_LONG,"Ein News-Gruppen-Tool.\n\
Befehle: addg      <grname> <ownername>   : Gruppe erzeugen\n\
         removeg   <grname>               : Gruppe loeschen\n\
         addw      <grname> <username>    : Schreibberechtigten eintragen\n\
         removew   <grname> <username>    : Schreibberechtigten austragen\n\
         addd      <grname> <username>    : Loeschberechtigten eintragen\n\
         removed   <grname> <username>    : Loeschberechtigten austragen\n\
         addr      <grname> <username>    : Leseberechtigten eintragen\n\
         remover   <grname> <username>    : Leseberechtigten austragen\n\
         ginfo     <grname>               : Info ueber Gruppe abfragen\n\
         setexpire <grname> <tage>        : Expiretime setzen\n\
         setmaxmsg <grname> <anz>         : Maxmsg setzen\n\
         setg <grname> <loeschlev> <schreiblev> <leselev> <maxmsg> <expire>\n");
  str=capitalize(((str=getuid(this_player()))[<1]=='s'||str[<1]=='x'||
		  str[<1]=='z')?str+="'":str+="s");
  SetProp(P_SHORT,str+" NewsTool");
  SetProp(P_NAME,str+" NewsTool");
  SetProp(P_GENDER,NEUTER);
  SetProp(P_ARTICLE,0);
  AddId("newstool");
  AddId("newsgruppentool");
  AddId("news-gruppen-tool");
  SetProp(P_AUTOLOADOBJ,1);
  SetProp(P_NODROP,1);
}

public varargs void init(object origin)
{
  add_action("addg","addg");
  add_action("removeg","removeg");
  add_action("addw","addw");
  add_action("removew","removew");
  add_action("addd","addd");
  add_action("removed","removed");
  add_action("addr","addr");
  add_action("remover","remover");
  add_action("setg","setg");
  add_action("setexpire","setexpire");
  add_action("expire","expire");
  add_action("ginfo","ginfo");
  add_action("setmaxmsg","setmaxmsg");
}

int addr(string str)
{
  mixed *arr;
  string st1, st2;
  
  if ((str=UA)=="" || sscanf(str,"%s %s",st1,st2) !=2){
    write("addr <groupname> <username>\nAnschliessend darf der User unabhaengig vom Wizlevel die Gruppe lesen.\n");
    return 1;
  }
  
  arr=old_explode(st2," ")-({""});
  switch ("/secure/news"->AddAllowed(st1,({}),({}),arr)){
    case 0: write("Param err\n"); break;
    case 1: write("Ok.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such board\n"); break;
  }
  return 1;
}

int remover(string str)
{
  mixed *arr;
  string st1, st2;

  if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){
    write("remover <gruppenname> <username>\nDanach darf der User die Gruppe nur noch lesen, wenn sein Wizlevel dies erlaubt.\n");
    return 1;
  }

  arr=old_explode(st2," ")-({""});
  switch ("/secure/news"->RemoveAllowed(st1,({}),({}),arr)){
    case 0: write("Param err\n"); break;
    case 1: write("Ok.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such board\n"); break;
  }
  return 1;
}

int addd(string str)
{
  mixed *arr;
  string st1, st2;

  if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){
    write("addd <gruppe> <user>\nUser darf Artikel loeschen (unabh vom Wizlevel)\n");
    return 1;
  }

  arr=old_explode(st2," ")-({""});
  	switch ("/secure/news"->AddAllowed(st1,arr,({}),({}))){
    case 0: write("Param err\n"); break;
    case 1: write("Ok.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such board\n"); break;
  }
  return 1;
}

int removed(string str)
{
  mixed *arr;
  string st1, st2;

  if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){
    write("removed <gruppe> <user>\nUser darf nur noch Artikel loeschen, wenn sein Wizlevel das erlaubt.\n");
    return 1;
  }

  arr=old_explode(st2," ")-({""});
  switch ("/secure/news"->RemoveAllowed(st1,arr,({}),({}))){
    case 0: write("Param err\n"); break;
    case 1: write("Ok.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such board\n"); break;
  }
  return 1;
}

int addw(string str)
{
  mixed *arr;
  string st1, st2;

  if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){
    write("addw <gruppe> <user>\nUser darf Artikel schreiben (unabh vom Wizlevel)\n");
    return 1;
  }

  arr=old_explode(st2," ")-({""});
  switch ("/secure/news"->AddAllowed(st1,({}),arr,({}))){
    case 0: write("Param err\n"); break;
    case 1: write("Ok.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such board\n"); break;
  }
  return 1;
}

int removew(string str)
{
  mixed *arr;
  string st1, st2;

  if (!(str=UA) || sscanf(str,"%s %s",st1,st2) !=2){
    write("removew <gruppe> <user>\nUser darf nur noch Artikel schreiben, wenn sein Wizlevel dies erlaubt.\n");
    return 1;
  }

  arr=old_explode(st2," ")-({""});
  switch ("/secure/news"->RemoveAllowed(st1,({}),arr,({}))){
    case 0: write("Param err\n"); break;
    case 1: write("Ok.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such board\n"); break;
  }
  return 1;
}

int setg(string str)
{
  string name;
  int dlevel, wlevel, rlevel, maxmessages, expire;

  if (!(str=UA) ||
      sscanf(str,"%s %d %d %d %d %d",name,dlevel,wlevel,rlevel,maxmessages,expire) != 6) {
    write("setg <gruppe> <loeschlevel> <schreiblevel> <leselevel> <maxmessages> <expire>\nGruppenparameter setzen, Bedeutung (Defaultwerte in Klammern):\n\
    name              : Der Name der Newsgroup\n\
    loeschlevel  (20) : Wizlevel, ab dem User Artikel loeschen koennen\n\
    schreiblevel ( 0) : Wizlevel, ab dem User Artikel schreiben koennen\n\
    leselevel    ( 0) : Wizlevel, ab dem User Artikel lesen koennen\n\
    maxmessages  (40) : Maximale Anzahl Artikel in einer Newsgruppe\n\
    expire       (-1) : Expiretime in Tagen, -1 = nie\n");
    return 1;
  }
  expire=86400*expire;
  switch("/secure/news"->SetGroup(name, dlevel, wlevel, rlevel, maxmessages,expire)){
    case 1: write("Ok\n"); break;
    case 0: write("Param error.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such group\n"); break;
  }
  return 1;
}

int setexpire(string str)
{
  string name;
  int expire;
  mixed *gr;

  if (!(str=UA)||sscanf(str,"%s %d",name,expire)!=2)
  {
    write("setexpire <gruppe> <tage>\n");
    return 1;
  }
  expire=86400*expire;
  if (!pointerp((gr="/secure/news"->GetGroup(name))))
  {
    write("Get group error\n");
    return 1;
  }
  switch("/secure/news"->SetGroup(name, gr[G_DLEVEL], gr[G_WLEVEL], gr[G_RLEVEL], gr[G_MAX_MSG],expire)){
    case 1: write("Ok\n"); break;
    case 0: write("Param error.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such group\n"); break;
  }
  return 1;
}

int setmaxmsg(string str)
{
  string name;
  int maxmsg;
  mixed *gr;
  
  if (!(str=UA)||sscanf(str,"%s %d",name,maxmsg)!=2)
  {
    write("setexpire <gruppe> <tage>\n");
    return 1;
  }
  if (!pointerp((gr="/secure/news"->GetGroup(name))))
  {
    write("Get group error\n");
    return 1;
  }
  switch("/secure/news"->SetGroup(name, gr[G_DLEVEL], gr[G_WLEVEL], gr[G_RLEVEL], maxmsg, gr[G_EXPIRE])){
    case 1: write("Ok\n"); break;
    case 0: write("Param error.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such group\n"); break;
  }
  return 1;
}

int ginfo(string str)
{
  mixed *gr;
  int i;
  
  if (!(str=UA))
  {
    write("Usage: ginfo <gname>\n");
    return 1;
  }
  if (!pointerp((gr="/secure/news"->GetGroup(str))))
  {
    write("Get group error\n");
    return 1;
  }
  if (gr[11]==-1)
  {
    write("Group \""+gr[0]+"\" does not exist.\n");
    return 1;
  }
        //         1         2         3         4         5         6         7 
        //123456789012345678901234567890123456789012345678901234567890123456789012345678
  printf("------------------------------------------------------------------------------\n");
  
  printf("Rubrik  : %s (%s) Savefile: %s\n\n",gr[0],capitalize(gr[1]),gr[2]);
  printf("Messages: %i/%i    Expire: %i Tage.\n\n",
		  (pointerp(gr[11])?sizeof(gr[11]):0),gr[10],gr[3]/86400);  
  
  printf( break_string((sizeof(gr[6])?"("+(CountUp(map(gr[6],#'capitalize)))+")":" "), 78, "Readers : "+gr[9]+" ",16));
  
  printf( break_string((sizeof(gr[5])?"("+(CountUp(map(gr[5],#'capitalize)))+")":" "), 78, "Writers : "+gr[8]+" ",16));
  
  printf( break_string((sizeof(gr[4])?"("+(CountUp(map(gr[4],#'capitalize)))+")":" "), 78, "Deleters: "+gr[7]+" ",16));
  
  printf("------------------------------------------------------------------------------\n");
  return 1;
}
    
int removeg(string str)
{
  if (!(str=UA))
  {
    write("removeg <gruppenname>\nGruppe LOESCHEN.\n");
    return 0;
  }
  switch("/secure/news"->RemoveGroup(str)){
    case 1: write("Ok. Bitte nicht vergessen, das Savefile der Newsgroup von Hand zu entfernen !\n"); break;
    case 0: write("Param error.\n"); break;
    case -1: write("No permission\n"); break;
    case -2: write("No such group"); break;
  }
  return 1;
}

int addg(string str)
{
  string name, owner;

  if (!(str=UA) || sscanf(str,"%s %s",name,owner)!=2)
  {
    write("addg <gruppe> <user>\nGruppe anlegen, <user> wird Besitzer der Gruppe\n");
    return 1;
  }
  switch ("secure/news"->AddGroup(name, owner)){
    case 1: write("Ok.\n"); break;
    case 0: write("Param error.\n"); break;
    case -1: write("No permission.\n"); break;
    case -2: write("Group already there\n"); break;
    case -3: write("Owner not found.\n"); break;
    case -4: write("Savefile already in use.\n"); break;
  }
  return 1;
}
  
int expire()
{
  "/secure/news"->expire_all();
  write("Expiring startet.\n");
  return 1;
}
