package sac.pessoa.endereco;

import sac.util.PersistenteObject;
import sac.exception.NullArgumentException;

public class Endereco extends PersistenteObject{
   private String rua;
   private String bairro;
   private String cidade;
   private String estado;
   private String pais;
   private String cep;
   private String email;
   private String telefone;

   /**
    * Construtos da Classe Endereço
    *
    * @param String   endereco
    * @param String   email
    * @param String   telefone
    */
   public Endereco(String rua, String bairro, String cidade, String estado,
                    String pais, String cep, String telefone)
   throws NullArgumentException {
      setRua( rua);
      setBairro( bairro);
      setCidade( cidade);
      setEstado( estado);
      setPais( pais);
      setCep( cep);
      setTelefone( telefone);
      setEmail( "");
   }

   /**
    * Metodo que recupera a rua de um endereco
    *
    * @return String  Contendo a rua
    */
   public String getRua() {
      return this.rua;
   }
   /**
    * Metodo que recupera o bairro de um endereco
    *
    * @return String  Contendo o bairro
    */
   public String getBairro()
   {
      return this.bairro;
   }
  /**
    * Metodo que recupera a cidade de um endereco
    *
    * @return String  Contendo o cidade
    */
   public String getCidade()
   {
      return this.cidade;
   }
   /**
    * Metodo que recupera o estado de um endereco
    *
    * @return String  Contendo o estado
    */
   public String getEstado()
   {
      return this.estado;
   }

   /**
    * Metodo que recupera o pais de um endereco
    *
    * @return String  Contendo o pais
    */
   public String getPais()
   {
      return this.pais;
   }

   /**
    * Metodo que recupera o cep de um endereco
    *
    * @return String  Contendo o cep
    */
   public String getCep()
   {
      return this.cep;
   }

   /**
    * Metodo que recupera email
    *
    * @return String  Contendo email
    *
   */
   public String getEmail()
   {
      return this.email;
   }

   /**
    * Metodo que recupera telefone
    *
    * @return String  Contendo telefone
    *
    */
   public String getTelefone()
   {
      return this.telefone;
   }

   /**
    * Metodo que altera a rua do  endereco
    *
    * @param newRua  String com a nova rua
    *
    */
   public void setRua(String newRua) throws NullArgumentException {
      if ( newRua != null && !newRua.equals("") ) {
          this.rua = newRua;
      } else {
          throw new NullArgumentException("Valor da rua nulo.");
      }
   }

   /**
    * Metodo que altera o bairro do  endereco
    *
    * @param newBairro  String com o novo Bairro
    *
    */
   public void setBairro(String newBairro) throws NullArgumentException {
      if ( newBairro != null && !newBairro.equals("") ) {
          this.bairro = newBairro;
      } else {
          throw new NullArgumentException("Valor do bairro nulo.");
      }
   }

   /**
    * Metodo que altera a cidade do  endereco
    *
    * @param newCidade  String com a nova Cidade
    *
    */
   public void setCidade(String newCidade) throws NullArgumentException {
      if ( newCidade != null && !newCidade.equals("") ) {
          this.cidade = newCidade;
      } else {
          throw new NullArgumentException("Valor da cidade nulo.");
      }
   }
   /**
    * Metodo que altera o estado do  endereco
    *
    * @param newEstado  String com a novo Estado
    *
    */
   public void setEstado(String newEstado) throws NullArgumentException {
      if ( newEstado != null && !newEstado.equals("") ) {
          this.estado = newEstado;
      } else {
          throw new NullArgumentException("Valor do estado nulo.");
      }
   }

  /**
    * Metodo que altera o pais do  endereco
    *
    * @param newPais  String com a novo Pais
    *
    */
   public void setPais(String newPais) throws NullArgumentException {
      if ( newPais != null && !newPais.equals("") ) {
          this.pais = newPais;
      } else {
          throw new NullArgumentException("Valor do país nulo.");
      }
   }

   /**
    * Metodo que altera o Cep do  endereco
    *
    * @param newCep  String com a novo Cep
    *
    */
   public void setCep(String newCep)throws NullArgumentException {
      if ( newCep != null && !newCep.equals("") ) {
          this.cep = newCep;
      } else {
          throw new NullArgumentException("Valor do cep nulo.");
      }
   }

   /**
    * Metodo que altera email
    *
    * @param newEndereco  String com o novo email
    *
   */
   public void setEmail(String newEmail) {
      if ( newEmail == null){
        this.email = "";
      } else {
        this.email = newEmail;
      }
   }


   /**
    * Metodo que altera telefone
    *
    * @param newTelefone  String com novo telefone
    *
   */
   public void setTelefone(String newTelefone) throws NullArgumentException {
      if ( newTelefone != null && !newTelefone.equals("") ) {
          this.telefone = newTelefone;
      } else {
          throw new NullArgumentException("Valor do telefone nulo.");
      }
   }

   public String toString(){
      StringBuffer sb = new StringBuffer();
      sb.append("Endereco: "+getRua().trim() + "\t");
      sb.append("Bairro: "+ getBairro().trim() + "\t");
      sb.append("Cep: "+getCep().trim() + "\t");
      sb.append("\n");
      sb.append("Cidade: "+ getCidade().trim() + "\t");
      sb.append("Estado: "+ getEstado().trim() + "\t");
      sb.append("Pais: "+ getPais().trim() + "\t");
      sb.append("\n");
      sb.append("Telefone: "+ getTelefone().trim() + "\t");
      sb.append("Email: "+ getEmail().trim() + "\t");
      return sb.toString();
   }

}
