package sac.gui.bean;

import java.util.List;
import sac.exception.NullArgumentException;
import sac.doenca.Doenca;
import sac.persistencia.OID;
import java.util.Iterator;

public class DoencaBean {

  private String oid;
  //Codigo Internacional da Doenca
  private String cid;
  //Nome da doenca
  private String nome;
  //Historico de ??? das doencas
  private String historico;
  //Sintomas da doenca
  private String sintomas;
  //Indica o nivel de Hereditariedade da doenca
  private String hereditariedade;
  //Um List das drogas relacionadas a doenca
  private List drogasRelacionadas;
  //Uma string com as Mensagens a serem apresentadas pelo BEAN
  private String mensagemErro;

  public DoencaBean() {
    this.nome = "";
    this.historico = "";
    this.drogasRelacionadas = new java.util.ArrayList();
    this.cid = "";
    this.hereditariedade = "";
    this.sintomas = "";
  }

  public DoencaBean(Doenca doenca) {
    this.oid = doenca.getId().getLongValue()+"";
    this.nome = doenca.getNome();
    this.historico = doenca.getHistorico();
    this.drogasRelacionadas = new java.util.ArrayList();
    setDrogasRelacionadas(doenca.getDrogasRelacionadas());
    this.cid = doenca.getCID();
    this.hereditariedade = doenca.getHereditariedade();
    this.sintomas = doenca.getSintomas();
  }

    public void validaBean() throws CampoInvalidoException {
        StringBuffer mensagem = new StringBuffer();
        boolean erro = false;

        mensagem.append("O(s) campo(s) ");
        if(nome == null || nome.equals("")) {
            mensagem.append("Nome ");
            erro = true;
        }
        if(cid == null || cid.equals("")) {
            mensagem.append("CID");
            erro = true;
        }
        if(sintomas == null || sintomas.equals("")) {
            mensagem.append("Sintomas ");
            erro = true;
        }
        if(hereditariedade == null || hereditariedade.equals("")) {
            mensagem.append("Hereditariedade ");
            erro = true;
        }
        if(historico == null || historico.equals("")) {
            mensagem.append("Historico ");
            erro = true;
        }
        if(erro) {
            mensagem.append("deve(m) ser preenchido(s).");
            mensagemErro = mensagem.toString();
            throw new CampoInvalidoException(mensagemErro);
        }
    }

  public void print(){
    System.out.println("===================================");
    if (nome!=null) System.out.println("Nome: "+this.nome);
    else System.out.println("Nome: null");
    if (cid!=null) System.out.println("Cid: "+this.cid);
    else System.out.println("Cid: null");
    if (oid!=null) System.out.println("OID: "+this.oid);
    else System.out.println("OID: null");
    if (hereditariedade!=null) System.out.println("Hereditariedade: "+this.hereditariedade);
    else System.out.println("Hereditariedade: null");
    if (sintomas!=null) System.out.println("Sintomas: "+this.sintomas);
    else System.out.println("Sintomas: null");
    if (drogasRelacionadas!=null){
      System.out.println("Drogas Relacionadas: "+drogasRelacionadas.size());
      Iterator iter = drogasRelacionadas.iterator();
      int i = 1;
      while (iter.hasNext()) {
        String item = (String) iter.next();
        System.out.println(" Droga["+i+"] = "+item);
        i++;
      }
    }
    System.out.println("===================================");
   }

  public void setOID(String oidNovo){
    this.oid = oidNovo;
  }
  public String getOID(){
    return oid;
  }
  public void setHistorico(String historico) {
    this.historico = historico;
  }
  public void setHereditariedade(String hereditariedade) {
    this.hereditariedade = hereditariedade;
  }
  //Estou recebendo uma List de Drogas e quero retornar uma List de Strings de OIDS
  public void setDrogasRelacionadas(List drogas) {
    if(drogas!=null){
      System.out.println("Numero de Drogas: "+drogas.size());
      for (int i = 0; i<drogas.size(); i++ ) {
        String oidDroga = null;
        System.out.println("For ("+i+")");

        if(drogas.get(i) instanceof sac.droga.Droga){
          System.out.println(">>>> EM DoencaBean.setDrogasRelacionadas(), drogas = List de Drogas!!");
          oidDroga = ((sac.droga.Droga) drogas.get(i)).getID().getLongValue()+"";
        }else if(drogas.get(i) instanceof OID){
          System.out.println(">>>> EM DoencaBean.setDrogasRelacionadas(), drogas = List de OIDs!!");
          oidDroga = ((OID) drogas.get(i)).getLongValue()+"";
        }
        this.drogasRelacionadas.add(oidDroga);
      }
    }
  }
  public void setDrogasRelacionadasFromRequest(List idsDrogas) {
    if(idsDrogas!=null)
      this.drogasRelacionadas = idsDrogas;
  }
  public void setCid(String cid) {
    this.cid = cid;
  }
  public void setNome(String nome) {
    this.nome = nome;
  }
  public void setSintomas(String sintomas) {
    this.sintomas = sintomas;
  }
  public String getSintomas() {
    return sintomas;
  }
  public String getNome() {
    return nome;
  }
  public String getHistorico() {
    return historico;
  }
  public String getHereditariedade() {
    return hereditariedade;
  }
  public List getDrogasRelacionadas() {
    return drogasRelacionadas;
  }
  public String getCid() {
    return cid;
  }
  public Doenca getDoenca() throws NullArgumentException{
    Doenca doenca = new Doenca();
    List newDrogasRelacionadas = new java.util.ArrayList();

    if(!oid.equals("")) {
      doenca.setOID(new OID(Long.parseLong(oid)));
    }else System.out.println("No Metodo getDoenca() de DoencaBean, o OID eh VAZIO!!");
    doenca.setCID(cid);
    doenca.setHereditariedade(hereditariedade);
    doenca.setHistorico(historico);
    doenca.setNome(nome);
    doenca.setSintomas(sintomas);
    for (int i = 0; i<drogasRelacionadas.size(); i++ ) {
      String stringOID = (String) drogasRelacionadas.get(i);
      OID oid = new OID(Long.parseLong(stringOID));
      newDrogasRelacionadas.add(oid);
    }
    doenca.setDrogasRelacionadas(newDrogasRelacionadas);
    return doenca;
  }
  public String getMensagemErro() {
    return mensagemErro;
  }
  public void setMensagemErro(String mensagemErro) {
    this.mensagemErro = mensagemErro;
  }
}