/*    /secure/sefun/time.c
 *    from the Dead Souls LPC Library
 *    simuls reguarding MUD time
 *    created by Descartes of Borg 950514
 */

#include <lib.h>
#include <daemons.h>

#define MIN 60
#define HOUR (60 * MIN)
#define DAY  (24 * HOUR)
#define WEEK ( 7 * DAY)
#define YEAR ( 52 * WEEK)


int query_night() { return ((string)SEASONS_D->GetTimeOfDay() == "night"); }

string query_day_name(int x) { return (string)SEASONS_D->GetDayName(x); }

int query_date(int x) { return (int)SEASONS_D->GetDay(x); }

string query_month(int x) { return (string)SEASONS_D->GetMonth(x); }

int query_year(int x) { return (int)SEASONS_D->GetYear(x); }

int query_minutes(int x) { return (int)SEASONS_D->GetMinutes(x); }

string query_season(int x) { return (string)SEASONS_D->GetSeason(x); }

int query_hour(int x) { return (int)SEASONS_D->GetHour(x); }

function time_event(string tod, function f) {
    if( !functionp(f) ) error("Bad argument 1 to time_event().\n");
    return SEASONS_D->AddTimeEvent(tod, f);
}

varargs string time_elapsed(int arg1, int arg2){
    int tm, x;
    string str;
    if(arg2) arg1 = arg2 - arg1;
    tm = arg1;

    str = "";
    if (x = (tm / YEAR)) {
	str += x + "y ";
	tm -= x * YEAR;
    }

    if (x = (tm / WEEK)) {
	str += x + "w ";
	tm -= x * WEEK;
    }
    if (x = (tm / DAY)) {
	str += x +"d ";
	tm -= x * DAY;
    }
    if (x = (tm / HOUR)) {
	str += x + "h ";
	tm -= x * HOUR;
    }
    if (x = (tm / MIN)) {
	str += x + "m ";
	tm -= x * MIN;
    }
    if (tm) {
	str += tm + "s";
    }
    //str += str[0..<2] + "%^RESET%^.";
    return str;
}


