<?php
/**
* Classe UserValidate.class.php
* @filesource
* @autor		Kenio de Souza
* @copyright	Copyright 2024 - Souza Consultoria Tecnológica
* @package		vendor
* @subpackage	controller/user
* @version		1.0
* @date		 	07/08/2024
*/


/** Defino o local onde esta a classe */
namespace vendor\controller\user;

/** Importação de classes */
use vendor\controller\main\Main;

class UserValidate
{
	/** Declaro as variavéis da classe */
    private $Main = null;
    private $errors = array();
    private $info = null;
	private $userId = null;
	private $nameFirst = null;
	private $nameLast = null;
	private $email = null;
	private $password = null;
	private $passwordTemp = null;
	private $active = null;
	private $birthDate = null;
	private $genre = null;
	private $dateRegister = null;
	private $accessFirst = null;
	private $accessLast = null;
	private $administrator = null;
	private $passwordTempConfirm = null;
	private $usersIdCreate = null;
	private $usersIdUpdate = null;
	private $usersIdDelete = null;

	/** Construtor da classe */
	function __construct()
	{

		/** Instânciamento da classe de validação */
		$this->Main = new Main();

	}

	/** Método trata campo user_id */
	public function setUserId(int $userId) : void
	{

		/** Trata a entrada da informação  */
		$this->userId = isset($userId) ? $this->Main->antiInjection($userId) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->userId))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "user_id", deve ser informado');

		}

	}

	/** Método trata campo name_first */
	public function setNameFirst(string $nameFirst) : void
	{

		/** Trata a entrada da informação  */
		$this->nameFirst = isset($nameFirst) ? $this->Main->antiInjection($nameFirst) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->nameFirst))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "name_first", deve ser informado');

		}

	}

	/** Método trata campo name_last */
	public function setNameLast(string $nameLast) : void
	{

		/** Trata a entrada da informação  */
		$this->nameLast = isset($nameLast) ? $this->Main->antiInjection($nameLast) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->nameLast))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "name_last", deve ser informado');

		}

	}

	/** Método trata campo email */
	public function setEmail(string $email) : void
	{

		/** Trata a entrada da informação  */
		$this->email = isset($email) ? $this->Main->antiInjection($email) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->email))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "email", deve ser informado');

		}

	}

	/** Método trata campo password */
	public function setPassword(string $password) : void
	{

		/** Trata a entrada da informação  */
		$this->password = isset($password) ? $this->Main->antiInjection($password) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->password))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "password", deve ser informado');

		}

	}

	/** Método trata campo password_temp */
	public function setPasswordTemp(string $passwordTemp) : void
	{

		/** Trata a entrada da informação  */
		$this->passwordTemp = isset($passwordTemp) ? $this->Main->antiInjection($passwordTemp) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->passwordTemp))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "password_temp", deve ser informado');

		}

	}

	/** Método trata campo active */
	public function setActive(string $active) : void
	{

		/** Trata a entrada da informação  */
		$this->active = isset($active) ? $this->Main->antiInjection($active) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->active))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "active", deve ser informado');

		}

	}

	/** Método trata campo birth_date */
	public function setBirthDate(string $birthDate) : void
	{

		/** Trata a entrada da informação  */
		$this->birthDate = isset($birthDate) ? $this->Main->antiInjection($birthDate) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->birthDate))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "birth_date", deve ser informado');

		}

	}

	/** Método trata campo genre */
	public function setGenre(string $genre) : void
	{

		/** Trata a entrada da informação  */
		$this->genre = isset($genre) ? $this->Main->antiInjection($genre) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->genre))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "genre", deve ser informado');

		}

	}

	/** Método trata campo date_register */
	public function setDateRegister(string $dateRegister) : void
	{

		/** Trata a entrada da informação  */
		$this->dateRegister = isset($dateRegister) ? $this->Main->antiInjection($dateRegister) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->dateRegister))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "date_register", deve ser informado');

		}

	}

	/** Método trata campo access_first */
	public function setAccessFirst(string $accessFirst) : void
	{

		/** Trata a entrada da informação  */
		$this->accessFirst = isset($accessFirst) ? $this->Main->antiInjection($accessFirst) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->accessFirst))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "access_first", deve ser informado');

		}

	}

	/** Método trata campo access_last */
	public function setAccessLast(string $accessLast) : void
	{

		/** Trata a entrada da informação  */
		$this->accessLast = isset($accessLast) ? $this->Main->antiInjection($accessLast) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->accessLast))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "access_last", deve ser informado');

		}

	}

	/** Método trata campo administrator */
	public function setAdministrator(string $administrator) : void
	{

		/** Trata a entrada da informação  */
		$this->administrator = isset($administrator) ? $this->Main->antiInjection($administrator) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->administrator))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "administrator", deve ser informado');

		}

	}

	/** Método trata campo password_temp_confirm */
	public function setPasswordTempConfirm(string $passwordTempConfirm) : void
	{

		/** Trata a entrada da informação  */
		$this->passwordTempConfirm = isset($passwordTempConfirm) ? $this->Main->antiInjection($passwordTempConfirm) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->passwordTempConfirm))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "password_temp_confirm", deve ser informado');

		}

	}

	/** Método trata campo users_id_create */
	public function setUsersIdCreate(int $usersIdCreate) : void
	{

		/** Trata a entrada da informação  */
		$this->usersIdCreate = isset($usersIdCreate) ? $this->Main->antiInjection($usersIdCreate) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->usersIdCreate))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "users_id_create", deve ser informado');

		}

	}

	/** Método trata campo users_id_update */
	public function setUsersIdUpdate(int $usersIdUpdate) : void
	{

		/** Trata a entrada da informação  */
		$this->usersIdUpdate = isset($usersIdUpdate) ? $this->Main->antiInjection($usersIdUpdate) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->usersIdUpdate))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "users_id_update", deve ser informado');

		}

	}

	/** Método trata campo users_id_delete */
	public function setUsersIdDelete(int $usersIdDelete) : void
	{

		/** Trata a entrada da informação  */
		$this->usersIdDelete = isset($usersIdDelete) ? $this->Main->antiInjection($usersIdDelete) : null;

		/** Verifica se a informação foi informada */
		if(empty($this->usersIdDelete))
		{

			/** Adição de elemento */
			array_push($this->errors, 'O campo "users_id_delete", deve ser informado');

		}

	}

	/** Método retorna campo user_id */
	public function getUserId() : ? int
	{

		/** Retorno da informação */
		return (int)$this->userId;

	}

	/** Método retorna campo name_first */
	public function getNameFirst() : ? string
	{

		/** Retorno da informação */
		return (string)$this->nameFirst;

	}

	/** Método retorna campo name_last */
	public function getNameLast() : ? string
	{

		/** Retorno da informação */
		return (string)$this->nameLast;

	}

	/** Método retorna campo email */
	public function getEmail() : ? string
	{

		/** Retorno da informação */
		return (string)$this->email;

	}

	/** Método retorna campo password */
	public function getPassword() : ? string
	{

		/** Retorno da informação */
		return (string)$this->password;

	}

	/** Método retorna campo password_temp */
	public function getPasswordTemp() : ? string
	{

		/** Retorno da informação */
		return (string)$this->passwordTemp;

	}

	/** Método retorna campo active */
	public function getActive() : ? string
	{

		/** Retorno da informação */
		return (string)$this->active;

	}

	/** Método retorna campo birth_date */
	public function getBirthDate() : ? string
	{

		/** Retorno da informação */
		return (string)$this->birthDate;

	}

	/** Método retorna campo genre */
	public function getGenre() : ? string
	{

		/** Retorno da informação */
		return (string)$this->genre;

	}

	/** Método retorna campo date_register */
	public function getDateRegister() : ? string
	{

		/** Retorno da informação */
		return (string)$this->dateRegister;

	}

	/** Método retorna campo access_first */
	public function getAccessFirst() : ? string
	{

		/** Retorno da informação */
		return (string)$this->accessFirst;

	}

	/** Método retorna campo access_last */
	public function getAccessLast() : ? string
	{

		/** Retorno da informação */
		return (string)$this->accessLast;

	}

	/** Método retorna campo administrator */
	public function getAdministrator() : ? string
	{

		/** Retorno da informação */
		return (string)$this->administrator;

	}

	/** Método retorna campo password_temp_confirm */
	public function getPasswordTempConfirm() : ? string
	{

		/** Retorno da informação */
		return (string)$this->passwordTempConfirm;

	}

	/** Método retorna campo users_id_create */
	public function getUsersIdCreate() : ? int
	{

		/** Retorno da informação */
		return (int)$this->usersIdCreate;

	}

	/** Método retorna campo users_id_update */
	public function getUsersIdUpdate() : ? int
	{

		/** Retorno da informação */
		return (int)$this->usersIdUpdate;

	}

	/** Método retorna campo users_id_delete */
	public function getUsersIdDelete() : ? int
	{

		/** Retorno da informação */
		return (int)$this->usersIdDelete;

	}

	public function getErrors(): ? string
	{

		/** Verifico se deve informar os erros */
		if (count($this->errors)) {

	   		/** Verifica a quantidade de erros para informar a legenda */
	   		$this->info = count($this->errors) > 1 ? '<center>Os seguintes erros foram encontrados</center>' : '<center>O seguinte erro foi encontrado</center>';

	    	/** Lista os erros  */
	    	foreach ($this->errors as $keyError => $error) {

	        	/** Monto a mensagem de erro */
	        	$this->info .= '</br>' . ($keyError + 1) . ' - ' . $error;

    		}

    		/** Retorno os erros encontrados */
    		return (string)$this->info;

		} else {

    		return false;

		}

	}

	function __destruct(){}

}
