#pragma no_clone
#pragma strict_types

#include <macros.h>
#include <std.h>
#include <time.h>
#include <mudtime.h>
#include <stdproperties.h>
#include "/d/sys/kutils.h"

inherit "/std/room";
inherit "/d/std/event";

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/Amn/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..10:
      {	
	godzina=time_godziny;
	return MT_RANEK;
      }
    case 11:
      {
	godzina=time_godziny;
	return MT_POLUDNIE;
      }
    case 12..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";
}

