<?php

	require("models/user_model.php");
	require("entities/user_entity.php");
    require("mother_controller.php");

class UserCtrl  extends MotherCtrl {
		
		public function login(){
			
			$strMail 		= $_POST['user_mail']??"";
			$strPwd 		= $_POST['user_password']??"";
			
			// Tester le formulaire
			$arrError = [];
			if (count($_POST) > 0) {
				// Vérifier le formulaire
				if ($strMail == ""){
					$arrError['mail'] = "Le mail est obligatoire";
				}	
				if ($strPwd == ""){
					$arrError['pwd'] = "Le mot de passe est obligatoire";
				}
				
				// Si le formulaire est rempli correctement
				if (count($arrError) == 0){
					// Vérifier l'utilisateur en BDD
					$objUserModel 	= new UserModel;
					$arrResult 		= $objUserModel->verifUser($strMail, $strPwd);
					//var_dump($arrResult);
					if ($arrResult === false){ // Si la base de données ne renvoie rien
						$arrError[] = "Mail ou mot de passe invalide";
					}else{
						// Ajoute l'utilisateur en session
						$_SESSION['user']		= $arrResult;
						$_SESSION['success'] 	= "Bienvenue, vous êtes bien connecté";
						
						header("Location:index.php");
						exit;
					}
				}
			}	
			$this->_arrData['arrError']	= $arrError;


            		
			$this->_display("login");

		
		}
		

		public function logout(){
			session_start();
			/*session_destroy();
			session_start();*/
			
			// on supprime l'utilisateur en session
			unset($_SESSION['user']);
			
			$_SESSION['success'] 	= "Vous êtes bien déconnecté";
			
			header("Location:index.php");
			exit;

		}

		public function signin(){

			// Entité pour réafficher les valeurs dans le formulaire
			$objUser = new User();

			// Récupération des champs 
			$strPwdConfirm = $_POST['pwd_confirm'] ?? "";

			// Tableau d'erreurs 
			$arrError = [];

			// Traitement du formulaire uniquement si POST
			if (!empty($_POST)) {

				// Hydratation 
				$objUser->setName($_POST['user_name'] ?? "");
				$objUser->setFirstname($_POST['user_firstname'] ?? "");
				$objUser->setMail($_POST['user_mail'] ?? "");
				$objUser->setPseudo($_POST['user_pseudo'] ?? "");
				$objUser->setPwd($_POST['user_password'] ?? "");
				
				// Champs optionnels : on les stocke aussi même si ils sont vides
				$objUser->setPhone($_POST['user_phone'] ?? "");
				$objUser->setWork($_POST['user_work'] ?? "");
				$objUser->setLocation($_POST['user_location'] ?? "");
				$objUser->setDescription($_POST['user_description'] ?? "");


				// --- VALIDATIONS (obligatoires) ---
				if (trim($objUser->getName()) === "") {
					$arrError['user_name'] = "Le nom est obligatoire";
				}

				if (trim($objUser->getFirstname()) === "") {
					$arrError['user_firstname'] = "Le prénom est obligatoire";
				}

				if (trim($objUser->getMail()) === "") {
					$arrError['user_mail'] = "Le mail est obligatoire";
				} elseif (!filter_var($objUser->getMail(), FILTER_VALIDATE_EMAIL)) {
					$arrError['user_mail'] = "Le format du mail n'est pas correct";
				}

				if (trim($objUser->getPseudo()) === "") {
					$arrError['user_pseudo'] = "Le pseudo est obligatoire";
				}

				$strRegex = "/^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{16,}$/";
				if ($objUser->getPwd() == ""){
					$arrError['user_password'] = "Le mot de passe est obligatoire";
				}else if (!preg_match($strRegex, $objUser->getPwd())){
					$arrError['user_password'] = "Le mot de passe ne correspond pas aux règles";
				}else if($objUser->getPwd() != $strPwdConfirm){
					$arrError['pwd_confirm'] = "Le mot de passe et sa confirmation ne sont pas identiques";
				}


				// Si pas d'erreurs => insertion
				if (count($arrError) === 0) {
					$objUserModel = new UserModel();
					$boolInsert = $objUserModel->insert($objUser);

					if ($objUserModel->mailExists($objUser->getMail())) {

						$arrError['user_mail'] = "Ce mail existe déjà";
					} else {
						$boolInsert = $objUserModel->insert($objUser);

						if ($boolInsert === true) {
							$_SESSION['success'] = "Compte créé avec succès";
							header("Location:index.php?ctrl=user&action=login");
							exit;
						} else {
							$arrError['global'] = "Erreur lors de l'ajout";
						}
					}
				}
			}

			// Affichage de la vue inscription 
			$this->_display("inscription");
		}
}
