package br.com.fiap.bot.integradores.impl;

import java.text.NumberFormat;
import java.util.Locale;

import com.pengrad.telegrambot.model.Chat;

import br.com.fiap.banco.comandos.BotComando;
import br.com.fiap.banco.excecao.ContaInexistenteExcecao;
import br.com.fiap.banco.excecao.EmprestimoAbertoExcecao;
import br.com.fiap.banco.excecao.PrazoEmprestimoExcedidoExcecao;
import br.com.fiap.banco.excecao.SaldoInsuficienteExcecao;
import br.com.fiap.banco.excecao.ValorEmprestimoExcedidoExcecao;
import br.com.fiap.bot.integradores.IntegracaoBotSolicitacao;
import br.com.fiap.bot.util.ConverteMoedaUtil;

public class IntegracaoBotSolicitarEmprestimo extends IntegracaoBotSolicitacao {

	IntegracaoBotSolicitarEmprestimo() {
		super("Para efetivar seu emprstimo, informe o valor que voc precisa e a quantidade de parcelas.", "valor - quantidade parcelas (Ex: 500,00 - 36)");
	}

	@Override
	public Boolean validarResposta(String resposta) {
		boolean respostaOk = true;
		if(resposta != null){
			String [] respostas = resposta.split("-");
			try{
				if(!(Double.valueOf(respostas[0].trim()) > 0D)){
					respostaOk = false;
				}	
				if(!(Integer.valueOf(respostas[1].trim()) > 0D)){
					respostaOk = false;
				}	
			}catch(NumberFormatException e){
				respostaOk = false;
			}
		}else{
			respostaOk = false;			
		}
		return respostaOk;
	}

	@Override
	public String integrarBanco(String resposta, Chat usuario) {
		BotComando botComando = new BotComando();
		String [] respostas = resposta.split("-");
		String retorno = "";
		Double valorEmprestimo = Double.valueOf(respostas[0].trim());
		Integer quantidadeParcelas = Integer.valueOf(respostas[1].trim());
		
		try {
			botComando.solicitarEmprestimo(usuario.id(), valorEmprestimo, quantidadeParcelas);
			retorno = "Emprestimo solicitado com sucesso! O dinheiro est na sua conta!";
		} catch (ContaInexistenteExcecao e) {
			retorno = "Voc ainda no tem uma conta, para criar sua conta digite /criar_conta";
		} catch (ValorEmprestimoExcedidoExcecao e) {
			try {				
				retorno = "Emprstimo no confirmado! O valor mximo que voc pode solicitar : "
						+ ConverteMoedaUtil.conveterMoedaBr(botComando.verificarValorMaximoEmprestimo(usuario.id()));
			} catch (ContaInexistenteExcecao | SaldoInsuficienteExcecao e1) {
				retorno = "Emprstimo no confirmado! Valor excedido!";
			}
			
		} catch (PrazoEmprestimoExcedidoExcecao e) {
			retorno = "Emprstimo no confirmado! O valor mximo de parcela que voc pode solicitar  36";
		} catch (SaldoInsuficienteExcecao e) {
			retorno = "Emprstimo no confirmado! Saldo na conta insuficiente!";
		} catch (EmprestimoAbertoExcecao e) {
			retorno = "Emprstimo no confirmado! Voc j tem um emprstimo aberto.";
		}
		return retorno;
	}
	
	@Override
	public String tratarPrimeiraInteracao(Chat usuario) {
		
		BotComando botComando = new BotComando();
		Double valorMaximoEmprestimo = null;
		NumberFormat format = NumberFormat.getCurrencyInstance(new Locale("pt", "BR"));
		StringBuffer retorno = new StringBuffer();
		
		try {
			valorMaximoEmprestimo = botComando.verificarValorMaximoEmprestimo(usuario.id());
			retorno.append(super.tratarPrimeiraInteracao(usuario))
			.append("\nO limite mximo que voc pode pedir empresta : ")
			.append(format.format(valorMaximoEmprestimo));
		} catch (ContaInexistenteExcecao e) {
			retorno.append("Voc ainda no tem uma conta, para criar sua conta digite /criar_conta");
		} catch (SaldoInsuficienteExcecao e) {
			retorno.append("Desculpe, mas voc no tem saldo para solicitar emprstimo.");
		}
		return retorno.toString();
	}

}

@@ -682,16 +682,23 @@
 cao %7B%0A%0A%09
+public 
 Integrac
@@ -823,16 +823,91 @@
 arcelas.
+ %5CnInforme no seguinte padro: valor - quantidade parcelas (Ex: 500,00 - 36)
 %22, %22valo
@@ -1130,16 +1130,49 @@
 %7B%0A%09%09%09%09if
+(respostas.length == 2)%7B%0A%09%09%09%09%09if 
 (!(Doubl
@@ -1200,34 +1200,36 @@
 %5D.trim()) %3E 0D))
+ 
 %7B%0A
+%09
 %09%09%09%09%09respostaOk 
@@ -1245,17 +1245,19 @@
 %09%09%09%09
-%7D%09%0A
+%09%7D%0A%09
 %09%09%09%09if
+ 
 (!(I
@@ -1298,18 +1298,20 @@
 ) %3E 0D))
+ 
 %7B%0A
+%09
 %09%09%09%09%09res
@@ -1335,33 +1335,68 @@
 %09%09%09%09
-%7D%09%0A%09%09%09%7Dcatch(NumberFormat
+%09%7D%0A%09%09%09%09%7Delse%7B%0A%09%09%09%09%09respostaOk = false;%09%09%09%09%09%0A%09%09%09%09%7D%0A%09%09%09%7Dcatch(
 Exce
@@ -3373,16 +3373,18 @@
 empresta
+do
  : %22)%0A%09%09

Ajuste na tratativa da validação da resposta