/*
		 * Igra
		 */

		/**
		* Metoda koja pokrece igru \n
		* 	sve setuje na nulu i snima trenutno
		*	vreme
		*	na serveru
		*/
		public int[] PokreniIgru ()
		{
			brojPokusaja = 0;
			vremeStart = DateTime.Now;
			status = EStatusIgre.IGRA_AKTIVNA;
			List<int> result = new List<int> ();

			using (DataBase data = new DataBase ())
			{
				int brojFilmova;
				int rbFilma;
				Random random = new Random ();
				try
				{
					data.Open ();
					brojFilmova = data.BrojFilmova ();
					rbFilma = random.Next (brojFilmova);
					film = data.PreuzmiFilm (rbFilma);
					nazivFilma = film.Naziv.ToUpper ().ToCharArray ();
					nazivFilma = ZamenaKraktera (nazivFilma);
				} catch (Exception ex)
				{
					ServiceFault fault = new ServiceFault ("Greska prilikom preuzimanja filma iz baze!");
					throw new FaultException<ServiceFault> (fault);
				}
			}

			result.Add (nazivFilma.Length);
			for (int i = 0; i < nazivFilma.Length; i++)
				if (nazivFilma [i] == ' ')
				{
					result.Add (i);
					nazivFilma [i] = '\0';
				}

			return result.ToArray ();
		}
		/*
		 * Rekordi
		 */

		/**
		* Metoda vraca listu Rekordas \n
		* prima dva argumenta \n
		* br (int) - koji predstavlja broj
		* rekorda koje treba preuzeti, ako je null (default)
		* vraca sve rekorde \n
		* tipSortiranja (ETipSortiranja) - enumeracija
		* predstavlja tip sortiranja (default - NajboljiUkupno)
		*/
		public List<Rekord> PreuzmiRekorde (int? br = null,
			ETipSortiranja tipSortiranja = ETipSortiranja.NajboljiUkupno)
		{
			List<Rekord> rekordi;
			using (DataBase data = new DataBase ())
			{
				try
				{
					data.Open ();
					rekordi = data.PreuzmiRekorde (br, tipSortiranja);
				} catch (Exception ex)
				{
					ServiceFault fault = new ServiceFault ("Greska prilikom preuzimanja rekorda!");
					throw new FaultException<ServiceFault> (fault);
				}
			}

			return rekordi;
		}
		/**
		 * Metoda dodaje rekord u bazu \n
		 * 	ime - ime korisnika koji je resavao sudoku
		 */
		public void SnimiRekord (String ime)
		{
			long vreme = Vreme ();
			using (DataBase data = new DataBase ())
			{
				try
				{
					data.Open ();
					data.NoviRekord (ime, brojPokusaja, vreme);
				} catch (Exception ex)
				{
					ServiceFault fault = new ServiceFault ("Greska prilikom snimanja rekorda!");
					throw new FaultException<ServiceFault> (fault);
				}
			}
		}
		/**
		 * Metoda koja vraca zadatu rec (film) kao listu karaktera
		 */
		public char[] Resenje ()
		{
			char[] result;

			if (status == EStatusIgre.IGRA_AKTIVNA)
				status = EStatusIgre.IGRA_ZAVRSENA_PORAZ;
			result = film.Naziv.ToCharArray ();
			
			if(result.Length < 1)
			{
				ServiceFault fault = new ServiceFault ("Greska prilikom preuzimanja resenja!");
				throw new FaultException<ServiceFault> (fault);
			}

			return result;
		}