<?php 

 /**
  * 
  */
class Validator extends cs
{
  private $data; 
  private $exceptions;
  
  public function __construct($data)
  {
    parent::__construct();
    
    if ($data) {
      
      foreach ($data as $key => $value) {
        
        if (in_array('cadastrarTeste', $data['exceptions']) AND !$this->recaptcha()) {
          throw new Exception("Captcha invalido");                  
        }

        if (!in_array('cadastrarTeste', $data['exceptions']) AND !self::isAdmin() AND $key == 'limitUsers' AND $this->isLimitUsers($value)) {
          throw new Exception("Você já alcançou seu limite de usuários");               
        }

        if (!in_array('cadastrarTeste', $data['exceptions']) AND !self::isAdmin() AND $key == 'limitg' AND $this->isLimitManagers($value)) {
          throw new Exception("Você já alcançou seu limite de gerenciadores");               
        }

        if (!in_array($key, $data['exceptions'])) {
          
          
          if (!isset($key) || empty($value)) {
            if ($key != 'is_trial' AND $key != 'obs') {
              throw new Exception("O campo $key é requerido e não pode está vazio");
            }           
          }

          if ($key == 'status') {
            $this->data[$key] = (in_array($value, ["normal", "desativado", "teste"])) ? $value : 'normal';
          }

          if ($key == 'profile' AND !$this->profileExists($value)) {
            throw new Exception("Escolha um profile válido!");                
          }

          if (in_array($key, ['email', 'celular', 'login'])) {
            
            if ($this->isUserExists($value) AND in_array('cadastrarTeste', $data['exceptions'])) {
              throw new Exception("O campo $key já existe, escolha outro ou recarregue a pagina!"); 
            }

            if ($key == 'login' AND $this->check_available($value)) {
              throw new Exception("Este login já está em uso.<br/>Escolha outro!"); 
            }              

            if ($key == 'celular' AND strlen((string) $value) > 11 || $key == 'celular' AND strlen((string) $value) < 10) {
              throw new Exception("Campo $key invalido!");  
            }

            if ($key == 'email' AND in_array('cadastrarTeste', $data['exceptions']) AND $this->emailAllowed($value)) {
              throw new Exception("Não é permitido usar $key temporário!");
            }  
          }
            
          $this->data[$key] = ($key != 'profile' AND is_string($value)) ? strtolower($this->filterKey($value)) : $this->filterKey($value);
            
          
        }        
      }      
    }
  }

  public function setExeception($exceptions) {
    $this->exceptions = $exceptions;
    return $this; 
  }

  public function getExeception() {
    if (!$this->exceptions) {
      throw new Exception("Não exceptions setadas"); 
    }
    return $this->exceptions;
  }
  
  public function getData() {
    return $this->data; 
  }
}



  