#pragma no_clone
#pragma strict_types

inherit "/std/room";

inherit "/klon_lib/d/std/event";

#include <macros.h>
#include <std.h>
#include <time.h>
#include <stdproperties.h>

#include "/klon_lib/sys/mudtime.h"
#include "/klon_lib/d/sys/kutils.h"

private int time_dni       = 0;
private int dzien_miesiaca = 0;
private int godzina        = 0;
private int time_godziny   = 0;
private int time_minuty    = 0;
private int time_sekundy   = 0;
private int time_miesiace  = 0;
private int time_lata  	   = 0;

nomask private void
time_na_liczby(int time)
{
  int n;
  
  //policz lata
  time_lata = (n = time / 31104000);
  time -= n * 31104000;

  //policz miesiace
  time_miesiace = (n = time / 2592000);
  time -= n * 2592000;

  //policz dni
  time_dni = (n = time / 86400);
  time -= n * 86400;

  //policz godziny
  time_godziny = (n = time / 3600);
  time -= n * 3600;

  //policz minuty
  time_minuty = (n = time / 60);
  time -= n * 60;

  //policz sekundy
  time_sekundy = time;
}

void
czas()
{
  string sek;
  int s;
  seteuid(getuid(this_object()));
  sek=read_file("/d/Faerun/std/godziny");
  sscanf(sek, "sekundy:%d" ,s);
  time_na_liczby(((time() - SECURITY->query_start_time())+s)*24);
}

int 
pora_roku()
{
  czas();

  switch(time_miesiace)
    {
    case 11:
    case 0..1:
      return MT_ZIMA;
    case 2:
      return MT_WCZESNA_WIOSNA;
    case 3..4:
      return MT_WIOSNA;
    case 5:
      return MT_WCZESNE_LATO;
    case 6..7:
      return MT_LATO;
    case 8:
      return MT_WCZESNA_JESIEN;
    case 9..10:
      return MT_JESIEN;
    }
}
int pora_dnia()
{
    czas();
    switch(time_godziny)
    {
	case 2..3:
	{
	    godzina=time_godziny;
	    return MT_SWIT;
	}
        case 4..7:
	{	
	    godzina=time_godziny;
	    return MT_WCZESNY_RANEK;
	}
        case 8..11:
	{	
	    godzina=time_godziny;
    	    return MT_RANEK;
	}
        case 12:
	{
	    godzina=time_godziny;
	    return MT_POLUDNIE;
	}
        case 13..16:
	{
	    godzina=time_godziny;
	    return MT_POPOLUDNIE;
	}
	case 18..19:
	    godzina=time_godziny;
	    return MT_WIECZOR;
        case 20..21:
	{
	    godzina=time_godziny;
	    return MT_POZNY_WIECZOR;
	}
        case 22..23:
        case 0..1:
	{
	    godzina=time_godziny;
	    return MT_NOC;
	}
    }
}

int
miesiac()
{
  czas();
//    if(time_dni==0) time_dni=1;
    
  switch(time_miesiace)
    {
    case 0: 
      {
	return M_STYCZEN;
      }
    case 1:
      {
	return M_LUTY;
      }     
    case 2: 
      {
	return M_MARZEC;
      }
    case 3: 
      {
	return M_KWIECIEN;
      }
    case 4: 
      {
	return M_MAJ;
      }
    case 5: 
      {
	return M_CZERWIEC;
      }
    case 6: 
      {
	return M_LIPEC;
      }
    case 7:
      {
	return M_SIERPIEN;
      } 
    case 8: 
      {
	return M_WRZESIEN;
      }
    case 9: 
      {
	  return M_PAZDZIERNIK;
      }
    case 10: 
      {
	return M_LISTOPAD;
      }
    case 11: 
      {
	return M_GRUDZIEN;
      }
    }
}

public string
check_time()
{
  int li;
  int pora_dn;
  int mies;
  li=this_object()->query_prop(ROOM_I_INSIDE);
  if(li==1) return "Nie jestes w stanie ustalic pory dnia nie wychodzac na zewnatrz.\n";
  mies=miesiac();
  pora_dn=pora_dnia();
  return "Wedlug kalendarza Krain mamy teraz "+DZIEN_MIESIACA_STR(time_dni)+" dzien miesiaca "+MT_MIESIAC_STR(mies)+".\n"+
    "Jest teraz okolo godziny "+GODZINA_STR(time_godziny)+" "+MT_PORA_DNIA_STRB(pora_dn)+".\n";
}
