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


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

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

class LogValidate
{
	/** Declaro as variavéis da classe */
    private $Main = null;
    private $errors = array();
    private $info = null;
	private $logId = null;
	private $clientId = null;
	private $datePost = null;
	private $file = null;
	private $key = null;
	private $b64 = null;

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

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

	}

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

		$this->key = !empty($key) ? $this->Main->antiInjection($key) : null;

		/** Verifica se a chave foi informada */
		if(!empty($key))
		{

			// Verifica se a senha tem pelo menos 8 caracteres
			if (strlen($this->key) < 8) {

				array_push($this->errors, 'A senha deve ter pelo menos 8 caracteres.');
			}

			// Verifica se a senha contém pelo menos uma letra maiúscula
			if (!preg_match('/[A-Z]/', $this->key)) {

				array_push($this->errors, 'A senha deve conter pelo menos uma letra maiúscula.');
			}

			// Verifica se a senha contém pelo menos uma letra minúscula
			if (!preg_match('/[a-z]/', $this->key)) {

				array_push($this->errors, 'A senha deve conter pelo menos uma letra minúscula.');
			}

			// Verifica se a senha contém pelo menos um número
			if (!preg_match('/\d/', $this->key)) {

				array_push($this->errors, 'A senha deve conter pelo menos um número.');
			}

			// Verifica se a senha contém pelo menos um caractere especial
			if (!preg_match('/[\W_]/', $this->key)) {

				array_push($this->errors, 'A senha deve conter pelo menos um caractere especial.');
			}  			

		} else {

			/** Adição de elemento */
			array_push($this->errors, 'É preciso informar uma chave válida');			
		}
	}

	/** Método trata campo log_id */
	public function setLogId(int $logId) : void
	{

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

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

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

		}

	}

	/** Método trata campo client_id */
	public function setClientId(int $clientId) : void
	{

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

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

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

		}

	}

	/** Método trata campo date_post */
	public function setDatePost(string $datePost) : void
	{

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

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

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

		}

	}

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

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

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

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

		}
	}

	/** Método retorna campo log_id */
	public function getLogId() : ? int
	{

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

	}

	/** Método retorna campo client_id */
	public function getClientId() : ? int
	{

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

	}

	/** Método retorna campo date_post */
	public function getDatePost() : ? string
	{

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

	}

	/** Método retorna campo file */
	public function getFile() : ? string
	{

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

	}

	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(){}

}

