package sac.pessoa.fisica;

/**
 * Projeto: SAC
 *
 * Tipo: RepositorioPessoaFisica
 *
 */
import java.util.List;

import sac.persistencia.OID;
import sac.persistencia.PersistenceException;
import sac.pessoa.PessoaJaCadastradaException;
import sac.pessoa.PessoaNaoCadastradaException;

public interface RepositorioPessoaFisica{

    /**
     * Assinatura de método para alteração de pessoas no BD.
     *
     * @param pessoa    Pessoa fisica que terá seus dados alterados.
     */
    public void alterar(PessoaFisica pessoa)
        throws PersistenceException, PessoaNaoCadastradaException;

    /**
     * Assinatura de método para verificaçao de pessoa do BD.
     *
     * @param pessoa    Objeto a ser procurado.
     */
    public boolean existe(PessoaFisica pessoa) throws PersistenceException;

    /**
     * Assinatura de método para inserção de pessoas no BD.
     *
     * @param pessoa    Objeto a ser inserido no BD.
     */
    public void inserir(PessoaFisica pessoa) throws PersistenceException;

    /**
     * Assinatura de método para conlsuta de pessoas no BD.
     *
     * @param cpf           String contendo cpf a ser encontrado no BD.
     *
     * @return PessoaFisica Pessoa encontrada pela busca.
     */
    public PessoaFisica procurar(String cpf) throws PersistenceException,
        PessoaNaoCadastradaException;

    /**
     * Assinatura de método para conlsuta de pessoas no BD.
     *
     * @param id            Long contendo ID da pessoa no BD.
     *
     * @return PessoaFisica Pessoa com nome correspondente a busca.
     */
    public PessoaFisica procurar(OID id)
        throws PersistenceException, PessoaNaoCadastradaException;

   /**
    * Metodo que procura por uma pessoa no sistema.
    *
    * @param filtro <code>FiltroBuscaPessoa</code> utilizado na busca pela
    *   pessoa.
    * @throw InvalidArgumentException caso o objeto Pessoa seja invalido.
    * @throw PessoaNaoCadastradaException caso a pessoa não esteja cadastrada no
    *   sistema.
    */
    public List procurar(FiltroBuscaPessoaFisica filtro, int startIndex,
        int size) throws PersistenceException;

    /**
     * Assinatura de método para conlsuta de pessoas no BD.
     *
     * @param pessoa    Objeto a ser pesquisado no BD.
     */
    public PessoaFisica procurar(PessoaFisica pessoa)
        throws PersistenceException, PessoaNaoCadastradaException;

    /**
     * Assinatura de método para remorcáo de pessoas no BD.
     *
     * @param pessoa    Objeto a ser removido do BD.
     */
    public void remover(PessoaFisica pessoa)
        throws PersistenceException, PessoaNaoCadastradaException;
}
