using System;
using Newtonsoft.Json;
using fatd_faturamento.Bancos.Sicoob;
using fatd_faturamento.ENTIDADE;
using fatd_faturamento.Bancos.Sicoob.Entidade;

namespace fatd_faturamento.BLL.RegraNegocio
{
    public class regraNegocioSicoob
    {
        public String GerarToken(string url, string clientId, string path, string certificadoSenha, string trustedServerCertPath)
        {
            string token = string.Empty;

            TokenSicoob tokenSicoob = null;

            try
            {
                tokenSicoob = new TokenSicoob();

                token = tokenSicoob.GerarToken(url, clientId, path, certificadoSenha, trustedServerCertPath);

            }
            catch (Exception)
            {
                throw;
            }

            return token;

        }

        public entidadeIncluirBoletosSicoob IncluirBoletoGrupoA(string token, string clientId, string path, string certificadoSenha, string url, int numeroContrato, int modalidade, int numeroContaCorrente, string especieDocumento, int tipoDesconto, int tipoMulta, int tipoJurosMora, int numeroParcela, entidadeTempFaturaA entidadeTempFaturaA)
        {
            string incluirBoletoGrupoA = string.Empty;

            BoletoSicoob boletoSicoob = null;
            IncluirBoletosResult incluirBoletosResultA = null;
            entidadeIncluirBoletosSicoob entidadeIncluirBoletosSicoobA = null;

            try
            {
                boletoSicoob = new BoletoSicoob();
                incluirBoletosResultA = new IncluirBoletosResult();
                entidadeIncluirBoletosSicoobA = new entidadeIncluirBoletosSicoob();

                incluirBoletoGrupoA = boletoSicoob.IncluirBoletoGrupoA(token, clientId, path, certificadoSenha, url, numeroContrato, modalidade, numeroContaCorrente, especieDocumento, tipoDesconto, tipoMulta, tipoJurosMora, numeroParcela, entidadeTempFaturaA);

                incluirBoletosResultA = JsonConvert.DeserializeObject<IncluirBoletosResult>(incluirBoletoGrupoA);

                entidadeIncluirBoletosSicoobA.STATUS = incluirBoletosResultA.resultado[0].status.codigo;

                if (entidadeIncluirBoletosSicoobA.STATUS == 200)
                {
                    entidadeIncluirBoletosSicoobA.CODIGOBARRAS = incluirBoletosResultA.resultado[0].boleto.codigoBarras;
                    entidadeIncluirBoletosSicoobA.LINHADIGITAVEL = incluirBoletosResultA.resultado[0].boleto.linhaDigitavel;
                    entidadeIncluirBoletosSicoobA.QRCODE = incluirBoletosResultA.resultado[0].boleto.qrCode;
                }

            }
            catch (Exception)
            {
                throw;
            }

            return entidadeIncluirBoletosSicoobA;

        }

        public entidadeIncluirBoletosSicoob IncluirBoletoGrupoB(string token, string clientId, string path, string certificadoSenha, string url, int numeroContrato, int modalidade, int numeroContaCorrente, string especieDocumento, int tipoDesconto, int tipoMulta, int tipoJurosMora, int numeroParcela, entidadeTempFatura entidadeTempFaturaB)
        {
            string incluirBoletoGrupoB = string.Empty;

            BoletoSicoob boletoSicoob = null;
            IncluirBoletosResult incluirBoletosResultB = null;
            entidadeIncluirBoletosSicoob entidadeIncluirBoletosSicoobB = null;

            try
            {
                boletoSicoob = new BoletoSicoob();
                incluirBoletosResultB = new IncluirBoletosResult();
                entidadeIncluirBoletosSicoobB = new entidadeIncluirBoletosSicoob();

                incluirBoletoGrupoB = boletoSicoob.IncluirBoletoGrupoB(token, clientId, path, certificadoSenha, url, numeroContrato, modalidade, numeroContaCorrente, especieDocumento, tipoDesconto, tipoMulta, tipoJurosMora, numeroParcela, entidadeTempFaturaB);

                incluirBoletosResultB = JsonConvert.DeserializeObject<IncluirBoletosResult>(incluirBoletoGrupoB);

                entidadeIncluirBoletosSicoobB.STATUS = incluirBoletosResultB.resultado[0].status.codigo;

                if (entidadeIncluirBoletosSicoobB.STATUS == 200)
                {
                    entidadeIncluirBoletosSicoobB.CODIGOBARRAS = incluirBoletosResultB.resultado[0].boleto.codigoBarras;
                    entidadeIncluirBoletosSicoobB.LINHADIGITAVEL = incluirBoletosResultB.resultado[0].boleto.linhaDigitavel;
                    entidadeIncluirBoletosSicoobB.QRCODE = incluirBoletosResultB.resultado[0].boleto.qrCode;
                }

            }
            catch (Exception)
            {
                throw;
            }

            return entidadeIncluirBoletosSicoobB;

        }

    }
}
