package sac.pessoa.fisica;

/**
 * Projeto: SAC
 *
 * Tipo: CadastroPessoaFisica
 *
 */

import java.util.List;

import sac.exception.ItemJaCadastradoException;
import sac.exception.ItemNaoCadastradoException;
import sac.exception.InvalidArgumentException;
import sac.exception.NullArgumentException;
import sac.persistencia.OID;
import sac.persistencia.PersistenceException;
import sac.pessoa.fisica.jdbc.DBTipoServico;

/**
 * Classe que cadastra serviços ao sistema.
 *
 * @see java.util.List;
 * @see sac.exception.InvalidArgumentException;
 * @see sac.exception.NullArgumentException;
 * @see sac.persistence.OID;
 * @see sac.exception.ItemJaCadastradoException;
 *
 * @author Edmo Sergio
 * @author Milena Rocha
 * @author Rodrigo Teixeira
 */

public class CadastroTipoServico
{
   private RepositorioTipoServico repositorio;

   /**
	 * Construtor da classe CadatroTipoServico
	 *
	 * @param _repositorio <code>RepositorioTipoServico</code> repositorio com acesso ao meio persistente
	 */
   public CadastroTipoServico(RepositorioTipoServico _repositorio) throws InvalidArgumentException {
	  repositorio = _repositorio;
   }

   /**
	* Metodo que cadastra novos tipos de serviço no sistema.
	*
	* @param servico <code>TipoServico</code> a ser cadastrado no sistema
	* @throw InvalidArgumentException caso o objeto servico seja invalido.
	* @throw ItemJaCadastradoException caso o serviço já esteja cadastrado no sistema.
	*/
   public void cadastrar(String servico) throws InvalidArgumentException,
        PersistenceException, ItemJaCadastradoException {
        OID oid = null;
        try {
        	oid = repositorio.procurarOID(servico);
        } catch(ItemNaoCadastradoException ince) {
                System.out.println("Erro no cadastro de tipo de serviço");
        }
	if ( servico == null){
		throw new InvalidArgumentException( "Pessoa a ser cadastrada tem valor nulo.");
	} else if (oid != null) {
		throw new ItemJaCadastradoException("Tipo de serviço ja cadastrado: "+servico);
	} else {
		 repositorio.inserir(servico);
	}
   }

   /**
     * Metodo que lista tipos de serviços cadastrados no sistema
     *
     * @throw InvalidArgumentException caso o objeto Pessoa seja invalido.
     * @throw PersistenceException
     */
   public List listarServicos()throws PersistenceException{
		return repositorio.listarServicos();
   }

   /**
    * Metodo que procura por um tipo de serviço no sistema.
    *
    * @param id <code>OID</code> a ser procurarado no sistema
    * @throw InvalidArgumentException caso o objeto Pessoa seja invalido.
    * @throw ItemNaoCadastradoException caso a pessoa não esteja cadastrada no sistema.
    */
   public String procurar( OID id) throws InvalidArgumentException,
 	PersistenceException, ItemNaoCadastradoException{
	if (id == null){
		throw new InvalidArgumentException( "Serviço procurado não cadastrado no sistema!");
	}
	String servico = repositorio.procurar(id);
	if (servico == null ){
		throw new ItemNaoCadastradoException("Servico nao cadastrado:" + id);
	}
	return servico;
   }


}
