package br.com.elotech.websaude.integracao.esus.model;

import java.util.UUID;

public class BD {

  public String getGUID() {
    return UUID.randomUUID().toString();
  }

  public boolean validaCnsBanco(String cns) {
    if (cns == null) {
      return false;
    }
    if (cns.length() > 1) {
      if (!(cns.substring(0, 1).equals("7")) && !(cns.substring(0, 1).equals("8")) && !(cns.substring(0, 1)
        .equals("9"))) {
        return validaCns(cns);
      } else {
        return validaCnsProv(cns);
      }
    }
    return false;

  }

  public boolean validaCns(String cns) {
    if ((cns == null) || (cns.trim().length() != 15)) {
      return false;
    }
    return isValid(cns);
  }

  public boolean validaCnsProv(String cns) {
    if (cns.trim().length() != 15) {
      return (false);
    }

    float resto;
    float soma;

    soma = ((Integer.parseInt(cns.substring(0, 1))) * 15)
      + ((Integer.parseInt(cns.substring(1, 2))) * 14)
      + ((Integer.parseInt(cns.substring(2, 3))) * 13)
      + ((Integer.parseInt(cns.substring(3, 4))) * 12)
      + ((Integer.parseInt(cns.substring(4, 5))) * 11)
      + ((Integer.parseInt(cns.substring(5, 6))) * 10)
      + ((Integer.parseInt(cns.substring(6, 7))) * 9)
      + ((Integer.parseInt(cns.substring(7, 8))) * 8)
      + ((Integer.parseInt(cns.substring(8, 9))) * 7)
      + ((Integer.parseInt(cns.substring(9, 10))) * 6)
      + ((Integer.parseInt(cns.substring(10, 11))) * 5)
      + ((Integer.parseInt(cns.substring(11, 12))) * 4)
      + ((Integer.parseInt(cns.substring(12, 13))) * 3)
      + ((Integer.parseInt(cns.substring(13, 14))) * 2)
      + (Integer.parseInt(cns.substring(14, 15)));

    resto = soma % 11;

    return resto == 0;
  }

  public boolean isValid(String s) {
    if (s.matches("[1-2]\\d{10}00[0-1]\\d") || s.matches("[7-9]\\d{14}")) {
      return somaPonderada(s) % 11 == 0;
    }
    return false;
  }

  private int somaPonderada(String s) {
    char[] cs = s.toCharArray();
    int soma = 0;
    for (int i = 0; i < cs.length; i++) {
      soma += Character.digit(cs[i], 10) * (15 - i);
    }
    return soma;
  }

  public static boolean validaCpf(String cpf) {
    int[] pesoCPF = {11, 10, 9, 8, 7, 6, 5, 4, 3, 2};
    if ((cpf == null) || (cpf.length() != 11))
      return false;

    Integer digito1 = calcularDigito(cpf.substring(0, 9), pesoCPF);
    Integer digito2 = calcularDigito(cpf.substring(0, 9) + digito1, pesoCPF);
    return cpf.equals(cpf.substring(0, 9) + digito1.toString() + digito2.toString());
  }

  private static int calcularDigito(String str, int[] peso) {
    int soma = 0;
    for (int indice = str.length() - 1, digito; indice >= 0; indice--) {
      digito = Integer.parseInt(str.substring(indice, indice + 1));
      soma += digito * peso[peso.length - str.length() + indice];
    }
    soma = 11 - soma % 11;
    return soma > 9 ? 0 : soma;
  }
}
