package sac.pessoa;

import sac.exception.InvalidArgumentException;
import sac.exception.NullArgumentException;
import sac.persistencia.OID;
import sac.util.PersistenteObject;

public class UsuarioComum extends PersistenteObject {
   private String nome;
   private String login;
   private String senha;
   private char status;

   public static final char STATUS_PESSOA_FISICA = 'f';
   public static final char STATUS_PESSOA_JURIDICA = 'j';
   public static final char STATUS_OPERADOR = 'o';

   /**
    * Construtor <code>UsuarioCommum</code>
    *
    * @param _nome <code>String</code> que identifica o nome completo do usuário
    * @param _login <code>String</code> que identifica o nome completo do usuário
    * @param _senha <code>String</code> que identifica o nome completo do usuário
    */
   public UsuarioComum(String _nome, String _login, String _senha, char _status) throws SenhaInvalidaException, NullArgumentException, InvalidArgumentException{
      setNome( _nome);
      setLogin( _login);
      setSenha(_senha);
      setStatus(_status);
   }

   /**
    *  Metodo que retorna o login do usuário
    *
    * @return <code>String</code> login do usuário
    */
   public String getLogin(){
	  return this.login;
   }

   /**
    * Metodo que retorna o nome completo do usuário
    *
    * @return <code>String<code> nome do usuário
    */
   public String getNome(){
	  return this.nome;
   }

   /**
    *  Metodo que retorna a senha do usuário
    *
    * @return <code>String</code> senha do usuário
    */
   public String getSenha(){
	  return this.senha;
   }
   /**
    *  Metodo que altera o login do usuário
    *
    * @param <code>String</code> login do usuário
    */
    public void setLogin(String newLogin) throws NullArgumentException{
        if ( newLogin != null && !newLogin.equals("")){
	    this.login = newLogin;
        } else {
            throw new NullArgumentException("Valor do login nulo.");
        }
    }
   /**
    * Metodo que altera o nome do usuário
    *
    * @return <code>String</code> nome do usuário
    */
   public void setNome(String newNome) throws NullArgumentException{
      if ( newNome != null && !newNome.equals("")){
	  this.nome = newNome;
      } else {
            throw new NullArgumentException("Valor do nome nulo.");
      }
   }
   /**
    *  Metodo que altera a senha do usuário
    *
    * @param String senha do usuário
    * @throws SenhaInvalidaException caso senha seja inválida
    */
   public void setSenha(String newSenha) throws SenhaInvalidaException, NullArgumentException{
       if ( newSenha == null){
            throw new NullArgumentException("Valor da senha nulo.");
       } else if(validarSenha(newSenha)){
              this.senha = newSenha;
       } else {
              throw new SenhaInvalidaException ("Senha = "+ newSenha+" invalida.");
       }
   }
   /**
    *  Metodo se uma dada senha é valida.
    *
    * @return boolena indicando se a senha é valida ou năo;
    */
   public boolean validarSenha(String senhaEntrada){
      return senhaEntrada.length() >= 4;
   }

    public char getStatus() {
      return status;
    }

    public void setStatus(char status) throws InvalidArgumentException{
        if ( status == UsuarioComum.STATUS_OPERADOR
          || status == UsuarioComum.STATUS_PESSOA_FISICA
          || status == UsuarioComum.STATUS_PESSOA_JURIDICA ){
          this.status = status;
        } else {
            throw new InvalidArgumentException("Status da Pessoa inválido.");
        }
    }
}
