#include "lakshmi.h"

inherit ZAMEK + "zamek_std"; 
 
#include "/d/Imperium/Zakon/engine/prawa.h"

#define TYTUL "live_s_tytul_podania/raportu"

create_imperium_room()
{
    add_prop(ROOM_I_INSIDE, 1);
    set_short("Kancelaria Zakonu Sigmara");
    set_long("Wielka Kancelaria w fortecy Zakonu jest miejscem, w " +
        "ktorym rycerze zalatwiaja wiekszosc swoich spraw zwiazanych " +
        "ze sluzba. Komnata, w ktorej sie ona miesci jest " +
        "niewielkich rozmiarow, a stosy wszelkiego typu pergaminow, " +
        "ksiag zakonnych, papierow, kalamarzy i pior znacznie " +
        "ograniczaja ilosc wolnego miejsca. Na srodku pomieszczenia " +
        "ustawione jest masywne biurko, na ktorym leza nie rozpatrzone " +
        "jeszcze podania i raporty zakonnikow. Sciany kancelarii obite " +
        "sa pluszowa tkanina, majaca na celu uniemozliwienie " +
        "podsluchiwania rozmow toczacych sie w tym pomieszczeniu.\n");

    add_item(({"papiery","pergaminy","ksiegi","ksiegi zakonne","raporty","podania"}),
      "Cale pomieszczenie zawalone jest roznego rodzaju papierami i podaniami. "+
      "Ich ilosc jest wrecz przerazajaca. Ciekawe kto jest w stanie rozeznac sie w "+
      "tej calej biurokracji.\n");
    add_item(({"kalamarze","piora","przybory"}),"Przybory skrybow walaja sie po calym "+
      "pomieszczeniu.\n");
    add_item(({"biurko","masywne biurko"}), 
      "Masywne, debowe biurko stoi w srodku pomieszczenia. Caly jego blat "+
      "pokrywaja papiery i przybory pisarskie.\n");
    add_item(({"tkanine","pluszowa tkanine","sciany"}),
      "Pluszowa tkanina jest gruba i ma za zadanie tlumic dzwieki rozmow, prowadzonych "+
      "w tej komnacie.\n");      
add_exit(NPATH + "hall2.c","polnoc",0,1,0);

    setuid();
    seteuid(getuid());
}

mixed *oczysc(mixed *pliki, string rozszerzenie)
{
	int format, i;
	mixed *dobre=({});
	string tmp;
	if (stringp(pliki))
	{
		pliki=({pliki});
		format=1;
	}
	for (i=sizeof(pliki)-1; i>=0; i--)
	{
		tmp=pliki[i];
		tmp=implode(explode(tmp, rozszerzenie),"");
		if (pliki[i]!=tmp)
			dobre+=pliki[i..i];
	}
	if (format && sizeof(dobre)) return dobre[0];
	if (format) return 0;
	return dobre;
}


int napisz(string str)
{
	if (!str || str=="")
	{
		write("Rezygnujesz z pisania.\n");
		return 0;
	}
	write_file(TXT+TP->query_prop(TYTUL),str+"\nNapisano: "+ctime(time())+"\n");
	TP->remove_prop(TYTUL);
	write("Konczysz pisac i kladziesz swoje dzielo na biurku, skad zostanie zabrane i przekazane Kapitule.\n");
}

int 
podanie(string *str)
{
	TP->add_prop(TYTUL,"podania/"+implode( ({ C(TP->query_real_name(PL_DOP)) }) + str,"_")+".nowe");
	clone_object("/obj/edit.c")->edit("napisz");
	return 1;
}

int
raport(string *str)
{
	TP->add_prop(TYTUL,"raporty/"+implode( ({ C(TP->query_real_name(PL_DOP)) }) + str,"_"));
	clone_object("/obj/edit.c")->edit("napisz");
	return 1;
}


int czas_powstania(string dir, string arg1, string arg2)
{
   if (file_time(dir+arg1)<file_time(dir+arg2)) return -1;
   if (file_time(dir+arg1)==file_time(dir+arg2)) return (arg1<arg2?-1:1);
   if (file_time(dir+arg1)>file_time(dir+arg2)) return 1;
}

int przejrzyj(string str)
{
	string *raporty,*podania;
	string raport,podanie,pom; //Dodalem wypisywanie daty podania i 
				   //sortowanie wedlug czasu. Tigr
	int i;
	if (str=="raporty")
	{
		if (!czy_mistrz())
		{
			notify_fail("Tylko Wielki Mistrz ma prawo czytac raporty.\n");
			return 0;
		}
		raporty=get_dir(TXT+"raporty/");
		say(QCIMIE(TP,PL_MIA)+" przeglada teczke z raportami.\n");
		if (!sizeof(raporty))
		{
			write("Przegladasz teczke z raportami, jednak jest ona pusta.\n");
			return 1;
		}
		raporty=sort_array(raporty,&czas_powstania(TXT+"raporty/"));
		for (i=0;i<sizeof(raporty);i++) 
		   raporty[i]=(pom=implode(explode(raporty[i],"_")," "))+
		     (strlen(pom)<=8?"\t":"") +"\t" + ctime(file_time(TXT+"raporty/"+raporty[i]));
		raport="\nRaport "+implode(raporty,"\nRaport ")+"\n";
		write("Przegladasz teczke z raportami. Zawiera ona:"+raport);
		return 1;
	}	
	if (str && wildmatch("podania*", str))
	{
		str=str[8..-1];
		if (str && member_array(str, ({"nowe", "rozpatrywane"})) ==-1)
			return notify_fail("Jakie podania chcesz przejrzec?\n");
			
		if (!PRAWA->sprawdz_prawa(PODANIA,TP))
		{
			notify_fail("Nie jestes uprawniony do przegladania podan.\n");
			return 0;
		}
		podania=get_dir(TXT+"podania/");
		if (str) podania=oczysc(podania, str);
		podania=sort_array(podania,&czas_powstania(TXT+"podania/"));
		say(QCIMIE(TP,PL_MIA)+" przeglada teczke z podaniami.\n");
		if (!sizeof(podania))
		{
			write("Przegladasz teczke z podaniami, jednak jest ona pusta.\n");
			return 1;
		}
		for (i=0;i<sizeof(podania);i++) 
			podania[i]=(pom=implode(explode(podania[i],"_")," ")[0..-(strlen(str) + 2)])+
			   (strlen(pom)<=7?"\t":"") +"\t" + ctime(file_time(TXT+"podania/"+podania[i]));
		podanie="\nPodanie "+implode(podania,"\nPodanie ")+"\n";
		write("Przegladasz teczke z podaniami. Zawiera ona:"+podanie);
		return 1;
	}	
	if (str=="archiwum") 
	{
		if (!PRAWA->sprawdz_prawa(PODANIA, TP))
		{
			notify_fail("Nie masz prawa przegladac archiwum!\n");
			return 0;
		}
		raporty=get_dir(TXT+"archiwum/");
		say(QCIMIE(TP,PL_MIA)+" przeglada zbiory archiwum.\n");
		raporty=sort_array(raporty,&czas_powstania(TXT+"archiwum/"));
		if (!sizeof(raporty))
		{
			write("Przegladasz archiwum, ale nic w nim nie ma!\n");
			return 1;
		}
		for (i=0;i<sizeof(raporty);i++) 
		    raporty[i]=implode(explode(raporty[i],"_")," ");
		raport="\n"+implode(raporty,"\n")+"\n";
		TP->more("Przegladasz archiwum. Zawiera ono:"+raport,0);
		return 1;
	}

	notify_fail("Co chcesz przejrzec? Raporty? Podania? Archwium?\n");
	return 0;
}

int 
przeczytaj(string str)
{
	string *teksty,tekst;
	int i;
	if (!str)
	{
		notify_fail("Co chcesz przeczytac?\n");
		return 0;
	}
		
	if (explode(str," ")[0]=="podanie")
	{
		if (!(PRAWA->sprawdz_prawa(PODANIA, TP))) return notify_fail("Nie masz prawa czytac podan!\n");
    
    		if(str == "podanie")
    		{
		      notify_fail("Czyje podanie chcesz przeczytac?\n");
		      return 0;
  		}  
    
		teksty=explode(str," ");
		teksty-=({teksty[0]});
		str=implode(teksty,"_");
		tekst=read_file(TXT+"podania/"+str+".nowe");
		if (!tekst)
			tekst=read_file(TXT+"podania/"+str+".rozpatrywane");
		if (!tekst)
		{
			notify_fail("Nie ma takiego podania. Podaj pelna nazwe.\n");
			return 0;
		}
		write("Czytasz podanie "+teksty[0]+":\n");
		TP->more(tekst);
		return 1;
	}
	if (explode(str," ")[0]=="raport")
	{
		if (!czy_mistrz()) return notify_fail("Tylko Wielki Mistrz moze czytac raporty.\n");			
    
    		if(str == "raport")
    		{
		      notify_fail("Czyj raport chcesz przeczytac?\n");
		      return 0;
		}  

		teksty=explode(str," ");
		teksty-=({teksty[0]});
		str=implode(teksty,"_");
		tekst=read_file(TXT+"raporty/"+str);
		if (!tekst)
		{
			notify_fail("Nie ma takiego raportu. Podaj pelna nazwe.\n");
			return 0;
		}
		write("Czytasz raport "+teksty[0]+":\n");
		TP->more(tekst);
		return 1;
	}
	if (explode(str," ")[0]=="archiwalny")
	{
		if (!PRAWA->sprawdz_prawa(PODANIA, TP)) 
			return notify_fail("Tylko Kapitula moze czytac raporty.\n");
    		teksty=explode(str, " ");
    		teksty-=teksty[0..0];
    		if (!sizeof(teksty))
    		{
		      notify_fail("Co z archiwum chcesz przeczytac?\n");
		      return 0;
		}  
		str=implode(teksty,"_");
		str=C(str);
		tekst=read_file(TXT+"archiwum/"+str);
		if (!tekst)
		{
			notify_fail("Nie ma takiego woluminu w archiwum. Podaj pelna nazwe.\n");
			return 0;
		}
		write("Czytasz "+L(str)+":\n");
		TP->more(tekst);
		return 1;
	}
	notify_fail("Co chcesz przeczytac? Jakis raport, podanie, cos z archiwum?\n");
	return 0;
}

int
zloz(string str)
{
	string *tabl;
	if (!str) 
	{
		notify_fail("Co chcesz napisac?\n");
		return 0;
	}
	tabl=explode(str," ");
	if (tabl[0]=="podanie") return podanie(tabl-({tabl[0]}));
	if (tabl[0]=="raport") return raport(tabl-({tabl[0]}));
	notify_fail("Co chcesz zlozyc? Raport? Podanie?\n");
	return 0;
}

int
usun(string str)
{
		string *teksty, tekst="", tmp;
		int i;
		if (!str)
		{
			notify_fail("Co chcesz usunac?\n");
			return 0;
		}
		if (!(PRAWA->sprawdz_prawa(USUWANIE_PODAN, TP))&&
		    (PRAWA->query_urzad(TP->query_real_name())!=MARSZALEK)) return notify_fail("Tylko uprawnione osoby moga usuwac raporty i podania.\n");
		if (explode(str," ")[0]=="podanie")
		{
			teksty=explode(str," ");
			teksty-=({teksty[0]});
			if (!sizeof(teksty)) return notify_fail("Ktore podanie chcesz usunac?\n");
			str=implode(teksty,"_");
			if (tmp=read_file(TXT+"podania/"+str+".nowe")) tekst=".nowe";
			if (read_file(TXT+"podania/"+str+".rozpatrywane")) tekst=".rozpatrywane";
			i=rename(TXT+"podania/"+str+tekst, TXT+"archiwum/Podanie_"+str);
			if (!i)
			{
				notify_fail("Nie ma takiego podania.\n");
				return 0;
			}
			write("Usunales podanie "+teksty[0]+".\n");
			return 1;
		}
		if (explode(str," ")[0]=="raport")
		{
			teksty=explode(str," ");
			teksty-=({teksty[0]});
			str=implode(teksty,"_");
			i=rename(TXT+"raporty/"+str, TXT+"archiwum/Raport "+str);
			if (!i)
			{
				notify_fail("Nie ma takiego raportu.\n");
				return 0;
			}
			write("Usuneles raport "+teksty[0]+".\n");
			return 1;
		}
		notify_fail("Co chcesz usunac? Jakis raport, podanie?\n");
		return 0;
}

int
zaznacz(string str)
{
		string *teksty;
		int i;
		if (!PRAWA->sprawdz_prawa(PODANIA, TP)) 
			return notify_fail("Tylko upowaznione osoby moga zaznaczac podania jako rozpatrzone.\n");
		if (str && explode(str," ")[0]=="podanie")
		{
			teksty=explode(str," ");
			teksty-=({teksty[0]});
			str=implode(teksty,"_")+".nowe";
			i=rename(TXT+"podania/"+str, TXT+"podania/"+str[0..-5]+"rozpatrywane");
			if (!i)
			{
				notify_fail("Nie ma takiego podania.\n");
				return 0;
			}
			write("Zaznaczyles podanie "+teksty[0]+" jako rozpatrywane.\n");
			return 1;
		}
		notify_fail("Chcesz zaznaczyc ktores podanie?\n");
		return 0;
}

init()
{
	::init();
	add_action("zloz","zloz");
	add_action("przejrzyj","przejrzyj");
	add_action("przeczytaj","przeczytaj");
	add_action("usun","usun");
	add_action("zaznacz","zaznacz");
}
