package sac.pessoa.juridica;

/**
 * Projeto: SAC
 *
 * Tipo: RepositorioPessoaJuridica
 *
 */

import java.util.List;

import sac.pessoa.PessoaNaoCadastradaException;
import sac.persistencia.OID;
import sac.persistencia.PersistenceException;

public interface RepositorioPessoaJuridica {

    /**
     * Metodo que altera uma empresa que esteja cadastrada no sistema,
     * substituindo seus dados por o de outra empresa.
     *
     * @param empresa <code>PessoaJuridica</code> a ser alterada no sistema
     * @param novaEmpresa <code>PessoaJuridica</code> que contem os novos dados a serem inseridos no sistema.
     *
     * @throw InvalidArgumentException caso o objeto PessoaJuridica seja invalido.
     * @throw PessoaNaoCadastradaException caso a pessoanjuridica(empresa) não esteja cadastrada no sistema.
     */
    public void alterar(PessoaJuridica pessoa)
    throws PersistenceException, PessoaNaoCadastradaException;

 /**
 * Metodo que indica se uma dada empresa <code>PessoaJuridica</code> já está cadastrado no sistema.
 *
 * @param empresa <code>PessoaJuridica</code> a ser procurada no sistema.
 */
 public boolean existe(PessoaJuridica pessoa) throws PersistenceException;

 /**
 * Metodo que insere novas empresas ao sistema.
 *
 * @param empresa <code>PessoaJuridica</code> a ser inserida no sistema
 *
 */
   public void inserir(PessoaJuridica pessoa) throws PersistenceException;

 /**
 * Metodo que procura por uma empresa no sistema a partir do cnpj.
 *
 * @param cnpj <code>string</code> a ser procurarada no sistema
 *
 */
 public PessoaJuridica procurar(String cnpj) throws PersistenceException,
    PessoaNaoCadastradaException;

    /**
     * Metodo que procura por uma empresa no sistema através do id.
     *
     * @param id <code>OID</code> a ser procurarado no sistema
     *
     */
    public PessoaJuridica procurar(OID id) throws PersistenceException,
        PessoaNaoCadastradaException;

    /**
     * Metodo que procura por uma empresa no sistema.
     *
     * @param pessoa <code>PessoaJuridica</code> a ser procurarada no sistema
     *
     */
    public PessoaJuridica procurar(PessoaJuridica pessoa) throws PersistenceException,
        PessoaNaoCadastradaException;

    /**
     * Metodo que procura por uma empresa no sistema.
     *
     * @param filtro <code>PessoaJuridica</code> a ser procurarada no sistema
     *
     */
    public List procurar(FiltroBuscaPessoaJuridica filtro, int startIndex,
        int size ) throws PersistenceException;

    /**
     * Metodo que remove uma empresa do sistema.
     *
     * @param pessoa <code>PessoaJuridica</code> a ser removida do sistema
     *
     */
    public void remover(PessoaJuridica pessoa)
        throws PersistenceException, PessoaNaoCadastradaException;
}
