/**********************************************************************
 * PTlink IRC Services is (C) Copyright PTlink IRC Software 1999-2005 *
 *                     http://software.pt-link.net                    *
 * This program is distributed under GNU Public License               *
 * Please read the file COPYING for copyright information.            *
 **********************************************************************

  Description: memoserv set command

 *  $Id: ms_info.c,v 1.15 2005/10/18 16:25:06 jpinto Exp $
*/

#include "module.h"
#include "memoserv.h"
#include "dbconf.h"
#include "my_sql.h"
#include "nsmacros.h"
#include "ns_group.h"	/* is_sadmin */
#include "lang/common.lh"
#include "lang/ms_info.lh"

SVS_Module mod_info =
/* module, version, description */
{"ms_info", "1.0", "memoserv info command" };
/* Change Log
  1.0 - #5: split memoserv with a memoserv options table
*/

/* external functions we need */
ServiceUser* (*memoserv_suser)(void);
u_int32_t (*find_group)(char *name);

MOD_REQUIRES 
  DBCONF_FUNCTIONS
  MEMOSERV_FUNCTIONS
  MOD_FUNC(is_sadmin)
MOD_END

/* internal functions */
void ms_info(IRC_User *s, IRC_User *u);

ServiceUser* msu;
int ms_log;

int mod_load(void)
{
  msu = memoserv_suser();
  ms_log = log_handle("memoserv");

  suser_add_cmd(msu, "INFO", ms_info, MS_INFO_SUMMARY, MS_INFO_HELP);
  return 0;
}

void
mod_unload(void)
{
  suser_del_mod_cmds(msu, &mod_info);
}

/* s = service the command was sent to
   u = user the command was sent from */
void ms_info(IRC_User *s, IRC_User *u)
{
  u_int32_t source_snid;
  u_int32_t tsnid;
  char *nick;

  CHECK_IF_IDENTIFIED_NICK
  
  nick = strtok(NULL, " ");
  if(nick == NULL)
    nick = u->nick;
  if((tsnid = nick2snid(nick)) == 0 )
    send_lang(u, s, NICK_X_NOT_REGISTERED, nick);
  else
  if((source_snid != tsnid) && !is_sadmin(source_snid))
    send_lang(u, s, MS_INFO_DENIED);
  else
  {
    int maxmemos;
    int bquota;
    u_int32_t flags;
    int mc, umc;
    if(memoserv_get_options(tsnid, &maxmemos, &bquota, &flags) == 0)
    {
      send_lang(u, s, UPDATE_FAIL);
      return;
    }
    umc = unread_memos_count(tsnid);
    mc = memos_count(tsnid);
    send_lang(u, s, MS_INFO_HEADER);
    send_lang(u, s, MS_INFO_MAXMEMOS_X, maxmemos);
    if(umc)
      send_lang(u, s, MS_INFO_IN_USE_X_X, mc, umc);
    else
      send_lang(u, s, MS_INFO_IN_USE_X, mc);
    /* send_lang(u, s, MS_INFO_BQUITA_X, bquota); */
    if(flags)
      send_lang(u, s, MS_INFO_OPTIONS,
       mask_string(memoserv_options, flags));
    send_lang(u, s, MS_INFO_TAIL);
  }
}


syntax highlighted by Code2HTML, v. 0.9.1