/*
   Inherit base room for domain common rooms
   Orginal from who knows where...
   Fixed and cleaned up code by Radix@FR : Dec 17, 1996
   Domain security added by Radix@FR : Dec 18, 1996
   Version 1.0
*/
inherit "/std/room";
string dom_name;
int do_list(string);
int add_creator(string);
int delete_creator(string);
int add_project(string);
void init() 
{
   ::init();
   add_action("do_list", "list");
   add_action("add_creator", "add");
   add_action("delete_creator", "delete");
   add_action("set_project", "project");
   
}
string query_dom() { return dom_name; }
void set_dom(string str) { dom_name = str; }
int do_list(string arg) 
{
   string *members, *domains, mem_list;
   mixed mast;
   int i, j;
   if(arg == "all")
      domains = get_dir("/d/");
   else 
      if(!arg)
         domains = ({ dom_name });
      else 
      {
         notify_fail("Usage: list\n       list all\n");
         return 0;
      }
   if(sizeof(domains) > 1) 
      write("All domains:\n");
   else 
      write("This domain:\n");
   for(i=0; i<sizeof(domains); i++) 
   {
      mast = "/d/" + domains[i] + "/master";
      members = (string *)mast->query_members(arg);
      printf("%8s has %2d members and is owned by %s.\n", domains[i],
              sizeof((string *)mast->query_members()),
              capitalize((string)mast->query_dom_lord()));
      mem_list = "";
      for(j=0; j<sizeof(members); j++)
         mem_list+=capitalize(members[j])+
                   (j==sizeof(members)-1?".":",");
      write(mem_list + "\n\n");
   }
   return 1;
}
int add_creator(string arg) 
{
   mixed mast;
  
   if(!arg) 
   {
      notify_fail("Usage: add <creator>\n");
      return 0;
   }
   arg = (string)this_player()->expand_nickname(arg);
   mast = "/d/" + dom_name + "/master";
   if((string)mast->query__dom_lord() != geteuid(this_player())) 
   {
      notify_fail("You are not the Lord of this Domain.\n");
      return 0;
   }
   if(!mast->add_member(arg)) 
   {
      notify_fail("Failed to add "+capitalize(arg)+" to "
                   +dom_name + ".\n");
      return 0;
   }
   write("Creator "+capitalize(arg)+" now added to "+dom_name+".\n");
   return 1;
}
int delete_creator(string arg) 
{
   mixed mast;
  
   if(!arg) 
   {
      notify_fail("Usage: delete <creator>\n");
      return 0;
   }
   arg = (string)this_player()->expand_nickname(arg);
   mast = "d/"+dom_name+"/master";
   if((string)mast->query_dom_lord() != geteuid(this_player())) 
   {
      notify_fail("You are not the Lord of this Domain.\n");
      return 0;
   }
   if(!mast->remove_member(arg)) 
   {
      notify_fail("Failed to remove "+capitalize(arg)+" from "+
                   dom_name+".\n");
      return 0;
   }
   write("Member "+capitalize(arg)+" removed from "+dom_name+".\n");
   return 1;
}
int set_project(string arg) 
{
   mixed mast;
   string proj;
   if(!arg || sscanf(arg,"%s %s", arg, proj) != 2)
   {
      notify_fail("Usage: project <creator> <project>\n");
      return 0;
   }
   arg = (string)this_player()->expand_nickname(arg);
   mast = "d/"+dom_name+"/master";
   if((string)mast->query_dom_lord() != geteuid(this_player())) 
   {
      notify_fail("You are not the Lord of this Domain.\n");
      return 0;
   }
   if(!mast->set_project(arg, proj)) 
   {
      notify_fail("Failed to set the project \""+capitalize(arg)
                  +"\" for "+dom_name+".\n");
      return 0;
   }
   write("Member "+capitalize(arg)+" project set in "+dom_name+".\n");
   return 1;
}