/* This file cleane dup by Jonez,
 * 21Mar06
*/

#ifndef LOCAL_TIME
#define LOCAL_TIME 1
#endif

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

string tz;

string query_tz(){
    string zone;
    if (file_size("/cfg/timezone.cfg") > 0) 
        zone = read_file("/cfg/timezone.cfg")[0..2];
    if (!zone) zone = "GMT";
    return zone;
}

mixed local_ctime(int i){
    return ctime(i + ((TIME_D->GetOffset(query_tz()) ) * 3600));
}

mixed local_time(mixed val){
    string *zonearray;
    string tzone,l_time, os;
    int timediff,offset;

    os = query_os_type();

    if(stringp(val)) {
        tzone =  upper_case(val);
        zonearray = explode(read_file("/cfg/timezones.cfg"),"\n");
        if(member_array(tzone,zonearray) == -1) tzone = query_tz();
        if(!tzone || tzone == "") tzone = query_tz();
        offset = TIME_D-> GetOffset(tzone);
        offset += EXTRA_TIME_OFFSET;
        timediff = offset * 3600;
        if(os != "windows") l_time=ctime(time() + timediff);
        else l_time=ctime(time());
        return l_time;
    }
    if(intp(val)){
        mixed *stuff;
        offset = 0;
        if(!LOCAL_TIME){
            offset = TIME_D-> GetOffset(query_tz());
            offset *= 3600;
        }
        stuff = localtime(time()+offset);
        stuff[9] = query_tz();
        return stuff;
    }

}

int valid_timezone(string str){
    string *zonearray;
    if(!str || str == "") return 0;
    str = upper_case(str)[0..2];
    zonearray = explode(read_file("/cfg/timezones.cfg"),"\n");
    zonearray += ({""});
    if(member_array(str,zonearray) == -1) {
        return 0;
    }
    else return 1;
}

string set_tz(string str){
    if(!str) str = "";
    if( str != "" && !valid_timezone(str)) {
        return "Invalid time zone.";
    }
    tz = str;
    if( !((int)master()->valid_apply(({ "PRIV_ASSIST", "PRIV_SECURE" }))) ) 
        error("Illegal attempt to modify timezone: "+get_stack()+" "+identify(previous_object(-1)));
    unguarded( (: write_file("/cfg/timezone.cfg",tz,1) :) );
    return "Mud time zone is now "+read_file("/cfg/timezone.cfg");
}
