package br.com.elotech.commom;

import br.com.elotech.model.familia.membro.Reg04;
import br.com.elotech.model.familia.membro.Reg06;
import br.com.elotech.model.familia.membro.Reg07;
import br.com.elotech.model.familia.membro.Reg08;
import org.apache.commons.lang3.StringUtils;

import java.util.Objects;

/**
 * User: claiton.nazaret
 * Date: 25/03/2019
 * Time: 08:55
 * Criado para converter os dados do CadUnico em dados no Banco
 */
public abstract class DePara {

  public static Integer parseInt(String value){
    return StringUtils.isNotBlank(value) ? Integer.parseInt(value) : null;
  }

  public static Long parseLong(String value){
    return StringUtils.isNotBlank(value) ? Long.parseLong(value) : null;
  }

  public static String sexo(String codSexo){
    if(StringUtils.isNotBlank(codSexo)){
      switch (Integer.parseInt(codSexo)){
        case 1: return "M";
        case 2: return "F";
      }
    }
    return null;
  }

  public static Boolean parseBoolean(String value) {
    if(StringUtils.isNotBlank(value)){
      return value.equals("1");
    }
    return null;
  }

  public static String parseEstadoRegistro(String uf) {
    if(StringUtils.isNotBlank(uf)){
      switch (uf){
        case "AC": return "ACRE";
        case "AL": return "ALAGOAS";
        case "AP": return "AMAPA";
        case "AM": return "AMAZONAS";
        case "BA": return "BAHIA";
        case "CE": return "CEARA";
        case "DF": return "DISTRITO FEDERAL";
        case "ES": return "ESPIRITO SANTO";
        case "GO": return "GOIAS";
        case "MA": return "MARANHAO";
        case "MT": return "MATO GROSSO";
        case "MS": return "MATO GROSSO DO SUL";
        case "MG": return "MINAS GERAIS";
        case "PA": return "PARA";
        case "PB": return "PARAIBA";
        case "PR": return "PARANA";
        case "PE": return "PERNAMBUCO";
        case "PI": return "PIAUI";
        case "RJ": return "RIO DE JANEIRO";
        case "RN": return "RIO GRANDE DO NORTE";
        case "RS": return "RIO GRANDE DO SUL";
        case "RO": return "RONDONIA";
        case "RR": return "RORAIMA";
        case "SC": return "SANTA CATARINA";
        case "SP": return "SAO PAULO";
        case "SE": return "SERGIPE";
        case "TO": return "TOCANTINS";
      }
    }
    return null;
  }

  public static Boolean parseBoolFrequentaEscola(String value) {
    if(StringUtils.isNotBlank(value)){
      return (value.equals("1") || value.equals("2"));
    }
    return null;
  }

  public static Integer escolaridade(Reg07 reg07, boolean frequenta) {
    Integer escolaridade = (frequenta ? parseInt(reg07.getCodCursoFrequentaMemb()) : parseInt(reg07.getCodCursoFrequentouPessoaMemb()));
    Integer serie = (frequenta ? parseInt(reg07.getCodAnoSerieFrequentaMemb()) : parseInt(reg07.getCodAnoSerieFrequentouMemb()));
    if(Objects.isNull(serie)){
      serie = 0;
    }
    int primeiroGrau = 10;
    int segundoGrau  = 20;
    if(Objects.nonNull(escolaridade)){
      switch (escolaridade){
        /*Creche*/
        case 1: return 1;
        /*Pré-escola e Classe de Alfabetização*/
        case 2:
        case 3: return 2;
        case 4:
        case 5:
        case 6:
          /* 1º à 9º serie*/
          if(serie == 10){
            return 99;
          }
          return primeiroGrau + serie;
        case 7:
        case 8:
          /* 2º Grau */
          return segundoGrau + serie;
        case 9:
          /*Ensino Fundamental EJA - séries iniciais (Supletivo - 1ª a 4ª)*/
          return 40;
        case 10:
        case 11:
          /**/
          return 41;
        case 13:
          /*Superior Completo ou Incompleto*/
          if(frequenta){
            return 30;
          }else{
            if(StringUtils.isNotBlank(reg07.getCodConcluiuFrequentouMemb())){
              return (parseBoolean(reg07.getCodConcluiuFrequentouMemb()) ? 31 : 30);
            }
            return 30;
          }
        default:
          return 99;
      }
    }
    return null;
  }

  public static Boolean verificaCuidadoConstante(Reg06 reg06) {
    if((StringUtils.isNotBlank(reg06.getIndAjudaNaoMemb()) && reg06.getIndAjudaNaoMemb().equals("1"))
    || (StringUtils.isNotBlank(reg06.getIndAjudaFamiliaMemb()) && reg06.getIndAjudaFamiliaMemb().equals("1"))
    || (StringUtils.isNotBlank(reg06.getIndAjudaEspecializadoMemb()) && reg06.getIndAjudaEspecializadoMemb().equals("1"))
    || (StringUtils.isNotBlank(reg06.getIndAjudaVizinhoMemb()) && reg06.getIndAjudaVizinhoMemb().equals("1"))
    || (StringUtils.isNotBlank(reg06.getIndAjudaInstituicaoMemb()) && reg06.getIndAjudaInstituicaoMemb().equals("1"))
    || (StringUtils.isNotBlank(reg06.getIndAjudaOutraMemb()) && reg06.getIndAjudaOutraMemb().equals("1"))){
      return true;
    }
    return false;
  }

  public static Integer tipoDeficiencia(Reg06 reg06) {
    if(StringUtils.isNotBlank(reg06.getIndDefCegueiraMemb()) && reg06.getIndDefCegueiraMemb().equals("1")){
      return 1;
    }else if(StringUtils.isNotBlank(reg06.getIndDefBaixaVisaoMemb()) && reg06.getIndDefBaixaVisaoMemb().equals("1")){
      return 2;
    }else if(StringUtils.isNotBlank(reg06.getIndDefSurdezProfundaMemb()) && reg06.getIndDefSurdezProfundaMemb().equals("1")){
      return 3;
    }else if(StringUtils.isNotBlank(reg06.getIndDefSurdezLeveMemb()) && reg06.getIndDefSurdezLeveMemb().equals("1")){
      return 4;
    }else if(StringUtils.isNotBlank(reg06.getIndDefFisicaMemb()) && reg06.getIndDefFisicaMemb().equals("1")){
      return 5;
    }else if(StringUtils.isNotBlank(reg06.getIndDefMentalMemb()) && reg06.getIndDefMentalMemb().equals("1")){
      return 6;
    }else if(StringUtils.isNotBlank(reg06.getIndDefSindromeDownMemb()) && reg06.getIndDefSindromeDownMemb().equals("1")){
      return 7;
    }else if(StringUtils.isNotBlank(reg06.getIndDefTranstornoMentalMemb()) && reg06.getIndDefTranstornoMentalMemb().equals("1")){
      return 8;
    }else return null;
  }

  /**
   * 101 - Não Trabalha
   *   1 - Trabalhador por conta própria (bico, autônomo)
   *   2 - Trabalhador temporário em área rural
   *   3 - Empregado sem carteira de trabalho assinada
   *   4 - Empregado com carteira de trabalho assinada
   *   5 - Trabalhador doméstico sem carteira de trabalho assinada
   *   6 - Trabalhador doméstico com carteira de trabalho assinada
   *   7 - Trabalhador não-remunerado
   *   8 - Militar ou servidor público
   *   9 - Empregador
   *  10 - Estagiário
   *  11 - Aprendiz (em condição legal)
   *  12 - Aposentado
   *  13 - Pensionista
   */
  public static Integer ocupacao(Reg08 reg08) {
    if(StringUtils.isNotBlank(reg08.getCodPrincipalTrabMemb())){
      return parseInt(reg08.getCodPrincipalTrabMemb());
    }else if(StringUtils.isNotBlank(reg08.getIndValRendaAposentMemb()) && reg08.getIndValRendaAposentMemb().equals("0")){
      return 12;
    }else if(StringUtils.isNotBlank(reg08.getIndValRendaPensaoAlimenMemb()) && reg08.getIndValRendaPensaoAlimenMemb().equals("0")){
      return 13;
    }else return 101;
  }

  public static Integer ordem(String numOrdemPessoa) {
    return Integer.parseInt(numOrdemPessoa);
  }

  public static Integer parentesco(String codParentescoRfPessoa) {
    /**
     * 1 - Pessoa de referencia
     * 2 - Conjuge / companheiro
     * 3 - Filho
     * 4 - Enteado;
     * 5 - Neto
     * 6 - Pai / Mãe
     * 7 - Sogro
     * 8 - Irmão / Irmã
     * 9 - Genro / Nora
     * 10 - Outro Parente
     * 11 - Não Parente
     * nulo = 10 - Outro Parente
     */
    Integer codParentesco = parseInt(codParentescoRfPessoa);
    return Objects.nonNull(codParentesco) ? codParentesco : 10;
  }
}
