// Filename:	user.h
// Contents:	the user interface object
// Author:		Greg Shaw
// Created:		5/30/93

/*
This file is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.

In addition to the permissions in the GNU General Public License, the
Free Software Foundation gives you unlimited permission to link the
compiled version of this file with other programs, and to distribute
those programs without any restriction coming from the use of this
file.  (The General Public License restrictions do apply in other
respects; for example, they cover modification of the file, and
distribution when not linked into another program.)

This file is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; see the file COPYING.  If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.  */

#ifndef _USER_H_
#define _USER_H_

// Object:	user
// Purpose:	encapsulate all of the user funtions into one object.
// Attributes:
//		fname, lname - the user's name
// 		login_name - the user's logon
// 		city - city where user from
// 		state - two character state
// 		uterm - terminal type
//		last_logon - the last time the user logged on (in seconds)
//		logins - the number of times the user has logged on
// 		downloads - number of downloads by the user
// 		uploads - the number of uploads by user
// 		priv_msgs - the number of private messages by user (unused)
//		pub_msgs - the  number of public messages by user (unused)
// 		credited - credited time (for chat or uploads)
//		flags - user access flags
//		tmpflags - temporary flags (if authorized by sysop)
//		acl - the access level of user
//		tmpacl - the temporary access level of user
//		timelimit - the timelimit for this user
//		temptl - temporary timelimit (if authorized by sysop)
//		timeused - the amount of time used on last call
//		msgflags - flags for when user has seen message (true/false)
// Methods:
//		get - load the user object with user info, or, get user info from user
//		list - list the users in the user list
//		change_acl - change the user's access level
//		change_tl - change user's timelimit
//		change_flags - change user's flags
//		u_flags - return user's flags
//		u_acl - return user's access level
//		u_timelimit - return user's timelimit
// Author:	Greg Shaw
// Created:	7/13/93

class User: public bbsint // inherited from user output function
{
	char	login_name[11];	// login name 
	char	alias[21];	// user's alias (for chatting)
	char	city[21];	// city 
	char	state[15];	// state 
	char	uterm[21];	// terminal type 
	char	has_color;	// has color?
	char	editor[15];	// favorite editor 
	char	lines;		// lines on screen
	char	cols;		// columns on screen
	CardRec	*card;		// card information for user
	time_t	last_login;	// last login 
	time_t	login_time;	// login time
	time_t	anniversary;	// date of first logon (for anniversary calculations)
	time_t	mail_check;	// time of last mail check
	int		card_color;	// color (ord) of card
	int		logins;		// number of logins 
	int		downloads;	// number of downloads 
	int		uploads;	// number of uploads 
	int		priv_msgs;	// private messages 
	int		pub_msgs;	// private messages 
	int		credited;	// credited time 
	unsigned long	mail_size;	// size of mail file on last check
	unsigned long	flags;		// flags 
	unsigned long	tmpflags;	// temp flags 
	unsigned int	acl;		// access level 
	unsigned int	tmpacl;		// temp access level 
	unsigned int	timelimit;	// time limit 
	unsigned int	tmptl;		// temporary time limit 
	unsigned int	timeused;	// time used during last call 
public:
	unsigned int	kused;		// number of kbytes downloaded last call
	char	fname[21];	// user's first name
	char	lname[21];	// user's last
	User();				// constructor 
	~User();			// destructor 
	int	append(void);			// append user to userlog
	int	check_card(void);	// check card color vs. access level
	int	check_info(void);	// ask user about term, lines, cols and such
	int	delete_user(char *name); // delete user with login name 
	int	sysop_edit(void);	// sysop's editor for users
	int	export(void);		// export important variables to environment
	int	getinfo(char firsttime);// (re)get user's setup and information
	int	get(char *name);	// get user - load user record or create new
	int	save(char *name);			// save the current user to the user file
	int	list(int search,int sysop);	// generate a list of users 
	int	change_acl(int acl, char perm);	// change access level - perm true for perm. 
	int	change_tl(int tl, char perm); // change timelimit - perm true for perm.  
	int	change_flags(unsigned long fl, char perm, char or); // change flags - perm true for perm.  
	int	display_info(int logon);	// display user information
	unsigned long u_flags(void) 	{ if (tmpflags != flags)  return tmpflags; else return flags; };
	unsigned int u_acl(void) 	{ if (tmpacl != acl)  return tmpacl; else return acl;};
	unsigned int u_timelimit(void) 	{ if (tmptl!=timelimit) return tmptl; else return timelimit;};
	int	prevtimeused() { return(timeused); };
	int	credit() { return(credited); };
	time_t	user_logon(void) { return(login_time);};
	time_t	last_logon(void) { return(last_login);};
	char	*logname(void) { return(login_name); };
	char	*editorname(void) { return(editor); };
	CardRec	*usercard(void) { return(card); };
	int	mailavail(void);	// is mail available?
	void	inc_uploads(int num) { uploads += num; }; // increment number of uploads
	void	inc_downloads(int num) { downloads += num; }; // increment number of downloads
	void	inc_credit(int num) { credited += num; }; // increment credited minutes
	int	u_uploads(void) { return(uploads); };
	int	u_downloads(void){ return(downloads); };
	int	inactive_delete(void);
	int	inactive_list(void);
};

#endif // _USER_H_
