<?php
	/**
	 * Page des groups
	 */
	class groups extends Controller
	{
		/**
		 * Cette fonction est appelée avant toute les autres : 
		 * Elle vérifie que l'utilisateur est bien connecté
		 * @return void;
		 */
		public function before()
		{
			internalTools::verifyConnect();
		}

		/**
		 * Cette fonction est alias de showAll()
		 */	
		public function byDefault()
		{
			$this->showAll();
		}
		
		/**
		 * Cette fonction retourne tous les groupes, sous forme d'un tableau permettant l'administration de ces groupes
		 * @return void;
		 */
		public function showAll()
		{
			//Creation de l'object de base de données
			global $db;
			

			$groups = $db->getGroupsWithContactsNb();
			$this->render('groups', array(
				'groups' => $groups,
			));
			
		}

		/**
		 * Cette fonction supprime une liste de groupes
		 * @return void;
		 */
		public function delete()
		{
			//On vérifie que le jeton csrf est bon
			if (!internalTools::verifyCSRF())
			{
				header('Location: ' . $this->generateUrl('groups', 'showAll', array(
					'errormessage' => 'Jeton CSRF invalide !'
				)));
				return true;
			}

			//Create de l'object de base de données
			global $db;
			
			$groups_ids = $_GET;
			$db->deleteGroupsIn($groups_ids);
			header('Location: ' . $this->generateUrl('groups'));		
		}

		/**
		 * Cette fonction retourne la page d'ajout d'un group
		 */
		public function add()
		{
			$this->render('addGroup');
		}

		/**
		 * Cette fonction retourne la page d'édition des groupes
		 */
		public function edit()
		{
			global $db;
			
			$groups = $db->getGroupsIn($_GET);
			$blocks = array(); //On défini la variable qui correspondra à un bloc groupe et contacts

			//Pour chaque groupe, on récupère les contacts liés
			foreach ($groups as $key => $group)
			{
				$groups[$key]['contacts'] = $db->getContactsForGroup($group['id']);	
			}

			$this->render('editGroups', array(
				'groups' => $groups,
			));
		}

		/**
		 * Cette fonction insert un nouveau contact
		 */
		public function create()
		{
			//On vérifie que le jeton csrf est bon
			if (!internalTools::verifyCSRF())
			{
				header('Location: ' . $this->generateUrl('groups', 'showAll', array(
					'errormessage' => 'Jeton CSRF invalide !'
				)));
				return true;
			}

			global $db;
			

			$nom = $_POST['name'];
			if ($db->createGroup($nom))
			{
				$id_group = $db->lastId();
				$db->createEvent('GROUP_ADD', 'Ajout du groupe : ' . $nom);
				foreach ($_POST['contacts'] as $id_contact)
				{
					$db->createGroups_contacts($id_group, $id_contact);
				}

				header('Location: ' . $this->generateUrl('groups', 'showAll', array(
					'successmessage' => 'Le groupe a bien été créé.'
				)));
		
				return true;
			}

			header('Location: ' . $this->generateUrl('groups', 'showAll', array(
				'errormessage' => 'Impossible de créer ce groupe.'
			)));
		}

		/**
		 * Cette fonction met à jour une liste de groupes
		 */
		public function update()
		{
			//On vérifie que le jeton csrf est bon
			if (!internalTools::verifyCSRF())
			{
				header('Location: ' . $this->generateUrl('groups', 'showAll', array(
					'errormessage' => 'Jeton CSRF invalide !'
				)));
				return true;
			}

			global $db;
			

			//Pour chaque groupe reçu, on boucle en récupérant son id (la clef), et le contact le tableau du groupe (nom et liste des contacts)
			foreach ($_POST['groups'] as $id_group => $group)
			{
				$db->updateGroup($id_group, $group['name']); //On met à jour le nom du groupe
				$db->deleteGroups_contactsForGroup($id_group); //On supprime tous les contacts de ce groupe
				foreach ($group['contacts'] as $id_contact) //Pour chaque contact on l'ajoute au groupe
				{
					$db->createGroups_contacts($id_group, $id_contact);
				}
			}

			$message = 'Tous les groupes ont été modifiés avec succès.';
			header('Location: ' . $this->generateUrl('groups', 'showAll', array(
				'successmessage' => $message,
			)));
		}

		/**
		 * Cette fonction retourne la liste des groupes sous forme JSON
		 */
		public function jsonGetGroups()
		{
			global $db;
			
			echo json_encode($db->getAll('groups'));
		}
	}