package sac.pessoa.juridica.jdbc;

import java.util.List;
import java.sql.ResultSet;
import java.sql.Connection;
import java.sql.SQLException;

import sac.exception.NullArgumentException;
import sac.exception.ItemNaoCadastradoException;
import sac.persistencia.OID;
import sac.persistencia.PersistenceException;
import sac.pessoa.fisica.RepositorioTipoServico;
import sac.pessoa.fisica.jdbc.DBTipoServico;
import sac.pessoa.juridica.OfertaTrabalho;
import sac.pessoa.util.jdbc.PersistenteFactory;

public class PersistenteFactory_Oferta implements PersistenteFactory {

    RepositorioTipoServico repositorioServico;

    public PersistenteFactory_Oferta () throws PersistenceException {

        repositorioServico = DBTipoServico.getInstancia();
    }

    public Object produce (Connection con, ResultSet rs) throws PersistenceException{
        OfertaTrabalho oferta = null;
        try {
            if (rs.next()){
                long id = rs.getLong("cd_oferta");
                int carga_horaria = rs.getInt("vl_carga_horaria");
                String requisistos = rs.getString ("ds_requisitos");
                long id_servico = rs.getLong("cd_tipo_servico");

                String tipo_servico = repositorioServico.procurar( new OID (id_servico) );

                OID oid = new OID (id);
                oferta =  new OfertaTrabalho (carga_horaria, requisistos, tipo_servico);
                oferta.setId( oid);
            }

            return oferta;
        } catch (ItemNaoCadastradoException iteme){
            throw new PersistenceException("Problema no Banco, tipo de servico "+
                "da oferta inexistente", iteme);
        } catch (NullArgumentException nulle) {
            throw new PersistenceException("Nao foi possivel criar Pessoa Juridica.", nulle);
        } catch(SQLException sqle){
            throw new PersistenceException ("Problemas no Banco" , sqle);
        }
  }
}