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


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

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

class StationValidate
{
	/** Declaro as variavéis da classe */
    private $Main = null;
    private $errors = array();
    private $info = null;
	private $stationId = null;
	private $clientId = null;
	private $userId = null;
	private $description = null;
	private $ip = null;
	private $port = null;
	private $networkPath = null;
	private $connectionName = null;
	private $connectionId = null;
	private $connectionUser = null;
	private $connectionPassword = null;
	private $observation = null;
	private $type = null;
	private $operatingSystem = null;
	private $cpu = null;
	private $memory = null;

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

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

	}

	/** Método trata campo station_id */
	public function setStationId(int $stationId) : void
	{

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

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

			/** Adição de elemento */
			array_push($this->errors, 'O campo "station_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 cliente deve ser informado');

		}

	}

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

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

		// /** 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 decription */
	public function setDescription(string $description) : void
	{

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

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

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

		}

	}	

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

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

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

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

		}

	}


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

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

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

			/** Adição de elemento */
			array_push($this->errors, 'A memória da estação deve ser informada');

		}

	}	

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

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

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

			/** Adição de elemento */
			array_push($this->errors, 'A CPU da estação deve ser informada');

		}

	}	
	
	/** Método trata campo type */
	public function setOperatingSystem(string $operatingSystem) : void
	{

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

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

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

		}

	}	

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

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

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

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

		// }

	}

	/** Método trata campo port */
	public function setPort(int $port) : void
	{

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

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

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

		// }

	}

	/** Método trata campo network_path */
	public function setNetworkPath(string $networkPath) : void
	{

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

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

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

		// }

	}

	/** Método trata campo connection_name */
	public function setConnectionName(string $connectionName) : void
	{

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

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

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

		}

	}

	/** Método trata campo connection_id */
	public function setConnectionId(string $connectionId) : void
	{

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

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

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

		}

	}

	/** Método trata campo connection_user */
	public function setConnectionUser(string $connectionUser) : void
	{

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

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

			/** Adição de elemento */
			array_push($this->errors, 'O campo usuário da conexão deve ser informado');

		}

	}

	/** Método trata campo connection_password */
	public function setConnectionPassword(string $connectionPassword) : void
	{

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

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

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

		}

	}

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

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

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

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

		// }

	}

	/** Método retorna campo station_id */
	public function getStationId() : ? int
	{

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

	}

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

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

	}

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

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

	}

	/** Método retorna campo description */
	public function getDescription() : ? string
	{

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

	}

	/** Método retorna campo ip */
	public function getIp() : ? string
	{

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

	}

	/** Método retorna campo type */
	public function getType() : ? string
	{

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

	}	

	/** Método retorna campo Operating_System */
	public function getOperatingSystem() : ? string
	{

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

	}		

	/** Método retorna campo port */
	public function getPort() : ? int
	{

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

	}

	/** Método retorna campo cpu */
	public function getCpu() : ? int
	{

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

	}	

	/** Método retorna campo memory */
	public function getMemory() : ? int
	{

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

	}	

	/** Método retorna campo network_path */
	public function getNetworkPath() : ? string
	{

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

	}

	/** Método retorna campo connection_name */
	public function getConnectionName() : ? string
	{

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

	}

	/** Método retorna campo connection_id */
	public function getConnectionId() : ? string
	{

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

	}

	/** Método retorna campo connection_user */
	public function getConnectionUser() : ? string
	{

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

	}

	/** Método retorna campo connection_password */
	public function getConnectionPassword() : ? string
	{

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

	}

	/** Método retorna campo observation */
	public function getObservation() : ? string
	{

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

	}

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

}
