<?php

class Agro_View_Helper_Beneficiarios extends Zend_Controller_Action_Helper_Abstract
{
    public function beneficiarios(array $values)
    {
        ?>
      <script>
        $(document).ready(function() {

          const controleTipoPessoa = (linha) => {
            
            let id = $(`#beneficiario_id_${linha}`);
            let optionPessoaFisica = $(`#id_tipo_beneficiario_${linha} > option[value="3"]`);
            let optionsPessoaJuridica = $(`#id_tipo_beneficiario_${linha} > option[value!="3"]`);
            let tipoBeneficiario = $(`#id_tipo_beneficiario_${linha}`);
            let tipoPessoa = $(`#tp_pessoa_${linha}`);

            tipoBeneficiario.removeClass('element_disabled');
            tipoBeneficiario.removeClass('readonly_background_disabled');

            optionPessoaFisica.removeAttr('disabled');
            optionsPessoaJuridica.removeAttr('disabled');

            if (tipoPessoa.val() === 'F') {
              tipoBeneficiario.val('3');
              tipoBeneficiario.addClass('element_disabled');
              tipoBeneficiario.addClass('readonly_background_disabled');

              optionsPessoaJuridica.attr('disabled', 'disabled');
              $(`.div_fl_nome_social_${linha}`).show();
              $(`.div_ds_nome_social_${linha}`).show();
            }

            if (tipoPessoa.val() === 'J') {
              tipoBeneficiario.removeClass('element_disabled');
              tipoBeneficiario.removeClass('readonly_background_disabled');

              optionPessoaFisica.attr('disabled', 'disabled');

              if (id.val() === '') {
                tipoBeneficiario.val('');
              }

              $(`#fl_nome_social_0_${linha}`).click();
              $(`.div_fl_nome_social_${linha}`).hide();
              $(`.div_ds_nome_social_${linha}`).hide();
            }
          };

          const inicializar = () => {
            $('.add_beneficiario').each(function(i) {
              $('#row_' + i + ' .check').prop('disabled', !$(this).prop('checked'));
            });

            $('.tp_pessoa').each(function(linha) {
              mascaraCpfCnpj(this, linha);
            });

            $('.data-beneficiario').mask('99/99/9999').validadata();
          };

          const mascaraCpfCnpj = (elemento, linha) => {
            let cpfCnpj = $('#nr_cpf_cnpj_' + linha);

            if($(elemento).val() === 'F') {
              cpfCnpj.mask('999.999.999-99');
              cpfCnpj.attr('size', 14);
              $('#div_' + linha + '_dt').show();
            } else {
              cpfCnpj.mask('**.***.***/****-99');
              cpfCnpj.attr('size', 16);
              $('#div_' + linha + '_dt').hide();
            }
          };

          const retornaLinha = (elemento) => {
            return elemento.attr('id').substr((elemento.attr('id').length) - 1, elemento.attr('id').length);
          }

          $('.add_beneficiario').click(function() {
            let linha = retornaLinha($(this));
            let linhaChecked = $(this).prop('checked');

            $(this).parent().parent().find($('.check')).prop('disabled', !linhaChecked);

            if (linhaChecked) {
              controleTipoPessoa(linha);
            }
          });

          $('.ds_tipo_conta').change(function() {
            let linha = retornaLinha($(this));
            let divLinhaN = $(`.div_${linha}_N`);
            let divLinhaS = $(`.div_${linha}_S`);
            let divTipoBeneficiario = $(`#divTipoBeneficiario_${linha}`);
            let selectTipoPessoa = $(`#tp_pessoa_${linha}`);

            divLinhaN.hide();
            divLinhaS.hide();
            divTipoBeneficiario.hide();

            if($(this).val() === 's') {
              selectTipoPessoa.val('J');
              divLinhaS.show();
            } else {
              selectTipoPessoa.val('F');
              divLinhaN.show();
              divTipoBeneficiario.show();
            }

            selectTipoPessoa.change();
          });

          $('.tp_pessoa').change(function() {
            let linha = retornaLinha($(this));
            $('#nr_cpf_cnpj_' + linha).unmask().val('');

            mascaraCpfCnpj(this, linha);
            controleTipoPessoa(linha);
          });

          inicializar();

          $('.fl_vinculada_financiamento').change(function () {
            let linha = $(this).attr('id').substr(($(this).attr('id').length)-1, $(this).attr('id').length);
            let linhaFinanciamento = null;

            if (this.value == 0) {
              $('#tr_email_instituicao_' + linha).hide();
              $('#ds_email_instituicao_financeira_' + linha).val('');
              return;
            }

            $('.fl_vinculada_financiamento:not(:disabled)').each(function (i, input) {

              let linhaAux =  input.id.substr((input.id.length)-1, input.id.length);
              if (input.value == 1 && linhaAux != linha) {
                linhaFinanciamento = linhaAux;
              }
            });

            if (linhaFinanciamento != null) {
              let nome = $('#ds_tipo_conta_'+ linhaFinanciamento).val() == 's' ? $('#id_banco_' + linhaFinanciamento + ' :selected').text() : $('#ds_nome_beneficiarios_' + linhaFinanciamento).val();
              alert("O beneficiário " + nome + " já está marcado como vinculado ao financiamento.");
              $('#tr_email_instituicao_' + linha).hide();
              $('#fl_vinculada_financiamento_' + linha).val(0);
              return;
            }

            $('#tr_email_instituicao_' + linha).show();
          });

          $(".ds_nome_social").blur(function(){
            let linha = retornaLinha($(this));
            validarNomeSocial(linha);
          });

          $(".fl_nome_social_0").click(function (e) {
            let linha = retornaLinha($(this));
            //$(`.div_ds_nome_social_${linha}`).hide();
            $(`#ds_nome_social_${linha}`).val('');
            $(`#ds_nome_social_${linha}`).prop('disabled', true);
          });

          $(".fl_nome_social_1").click(function (e) {
            let linha = retornaLinha($(this));
            //$(`.div_ds_nome_social_${linha}`).show();
            $(`#ds_nome_social_${linha}`).prop('disabled', false);
          });

        });
        
        function validarCamposVazios(dados) {
          const camposObrigatorios = [
            'ds_endereco_bairro',
            'ds_endereco_cep',
            'ds_endereco_logradouro',
            'ds_endereco_nro',
            'ds_tel',
            'id_estado',
            'id_municipio',
            'ds_email'
          ];
        
          for (const campo of camposObrigatorios) {
            let valor = dados[campo];

            // Verifica se é string vazia ou número indefinido
            if (valor === null || valor === undefined || (typeof valor === 'string' && valor.trim() === '')) {
              return false;
            }

            if (typeof valor === 'number' && (valor === null || valor === undefined)) {
              return false;
            }
          }
          return true;
        }

        function validarNomeSocial(linha) {
          if ($(`#fl_nome_social_1_${linha}`).is(':checked')) {
            let nomeSocial = $(`#ds_nome_social_${linha}`).val().trim();
            let regex = /^[a-zA-Z0-9\u00C0-\u00FF ]+$/;

            if (nomeSocial.length < 2) {
              alert(`Nome Social do beneficiário ${(parseInt(linha) + 1)} deve ter no mínimo 2 caracteres.`);
              $(`#ds_nome_social_${linha}`).val('');
              return false;
            }

            if (!regex.test(nomeSocial)) {
              alert(`Nome Social do beneficiário ${(parseInt(linha) + 1)} inválido. Apenas caracteres alfanuméricos são aceitos.`);
              $(`#ds_nome_social_${linha}`).val('');
              return false;
            }
          }

          return true;
        }

        function ocultarBlocoNomeSocial() {
          $('#ds_nome_social').val('');
          $('#fl_nome_social_0').click();
          $('.ctn_nome_social').hide();
        }

        function validarCpfCnpj(input) {
          if(input.value && !$.validarCpfCnpj(input.value)) {

            let linha = input.getAttribute('data-posicao');

            alert('CPF/CNPJ é inválido. Tente novamente.');

            input.value = '';

            $(`#ds_nome_beneficiarios_${linha}`).val('');
            $(`#id_banco_${linha}`).val('');
            $(`#ds_agencia_${linha}`).val('');
            $(`#tp_pessoa_${input.getAttribute('data-posicao')}`).focus();

            return false;
          }

          return true;
        }

        function buscarBeneficiario(input) {
          
          let indice = input.id.slice(-1);
          let dsTipoConta = $('#ds_tipo_conta_' + indice);

          if(input.value == '') {
            return;
          }

          $.ajax({
            type: 'POST',
            url: '/seguro/proponente/validarcpfcnpjproponenteclausula',
            dataType: 'json',
            data: {id_proposta: $('#id_proposta').val(), origem: 'clausula', cpf_cnpj : input.value},
            success: (response) => {
              if(response.erro === true) {
                alert(response.mensagem);
                input.value = '';
                return false;
              }

              let params = {
                cpf_cnpj: input.value,
                tp_pessoa: $(`#tp_pessoa_${indice}`).val()
              };

              let beneficiarioBanco = false;
              let rota = '/seguro/propostaajax/getbeneficiario';
              
              if (dsTipoConta.val() === 's') {
                beneficiarioBanco = true;
                rota = '/seguro/propostaajax/getbanco';
              }

              $.ajax({
                type: 'POST',
                url: rota,
                data: params,
                dataType: 'json',
                success: function(retorno) {
                  if(retorno == null) {
                    
                    if (dsTipoConta.val() === 's') {
                      alert('Nenhum banco encontrado para o CPF/CNPJ informado.');
                    }
                    let posicao = input.dataset.posicao
                    $("#fl_novo_beneficiario_"+posicao).val(true)
                    //$("#fl_endereco_valido_beneficiario_["+posicao+"]").val('false')
                    document.getElementById('fl_endereco_valido_beneficiario_['+posicao+']').value = 'false'
                    return;
                  }

                  if(retorno.message != null) {
                    alert(retorno.message);

                    dsTipoConta.val('s').change();

                    return false;
                  }

                  if (!beneficiarioBanco) {
                    let nascimentoBeneficiario = document.getElementById('beneficiario[' + indice + '][dt_nascimento_beneficiario]');
                    nascimentoBeneficiario.value = retorno.dt_nascimento_benef;
                    $('#ds_nome_beneficiarios_' + indice).val(retorno.ds_nome_beneficiario);
                    $('#id_tipo_beneficiario_' + indice).val(retorno.id_tipo_beneficiario);
                    $('#id_beneficiario_'+indice).val(retorno.id)
                    $('#ds_email_beneficiario_'+indice).val(retorno.ds_email)
                    if(!validarCamposVazios(retorno)){
                      let b = document.getElementById(`fl_endereco_valido_beneficiario_[${indice}]`)
                    
                      if($("#tp_pessoa_"+indice).val() === 'F'){
                         b.value = "0"
                      }else{
                        b.value = "1";
                      }
                     
                    }else{
                      let b = document.getElementById(`fl_endereco_valido_beneficiario_[${indice}]`).value = "1";
                      b.value = "1"
                    }
                  

                  } else {
                    $(`#id_banco_${indice}`).val(retorno.id_banco);
                    $(`#ds_agencia_${indice}`).val(retorno.ds_agencia);
                  }
                },
                error: function(xhr, desc, er) {
                  alert(xhr.responseText);
                }
              });
            },
            error: () => {
              alert('Erro ao validar o CPF/CNPJ do beneficiário.');
            }
          });
        }

      </script>
        <?
        $Bancos = Agro_Db_Table_Abstract::getDefaultAdapter()->fetchPairs('select id, ds_nome_banco from sistema.bancos order by ds_nome_banco');
        for ($i = 0; $i < QTD_BENEFICIARIOS; $i++) {
            $tipoConta = ($values[$i]['ds_tipo_conta'] == 's' ? 's' : 'n');
            ?>
          <div class='title-design'>
            <div class='title'><span>Dados do <?= $i + 1 ?>º Beneficiário</span></div>
          </div>
          <input type="hidden" name="novo_beneficiario_<?= $i ?>" id="fl_novo_beneficiario_<?= $i ?>" value="false">
          <input type="hidden" name="beneficiario[<?= $i ?>][id]" id="beneficiario_id_<?= $i ?>" value="<?= $values[$i]['id'] ?>"/>
          <input type="hidden" name="beneficiario[<?=$i?>][fl_favorecido_autorizacao_credito]" value="<?=$values[$i]['fl_favorecido_autorizacao_credito']?>" />
          
          <input type="hidden" value="1" name="fl_endereco_valido_beneficiario_[<?=$i?>]" id="fl_endereco_valido_beneficiario_[<?=$i?>]">
          <div class="row" id="row_<?= $i ?>">
            <div class="field">
              <br/>
              <input type="checkbox" class="add_beneficiario" name="beneficiario[<?= $i ?>][change]" value="1"
                     id="change_<?= $i ?>" <?= ($values[$i]['nr_cpf_cnpj'] ? 'checked' : '') ?> />
            </div>

            <div class="field">
              <label>Banco</label>
              <select name="beneficiario[<?= $i ?>][ds_tipo_conta]" class="ds_tipo_conta check"
                      id="ds_tipo_conta_<?= $i ?>">
                <option value="s" <?= ($tipoConta == 's' ? 'selected' : '') ?>>SIM</option>
                <option value="n" <?= ($tipoConta == 'n' ? 'selected' : '') ?>>NÃO</option>
              </select>
            </div>

            <div class="div_<?= $i ?>_N field <?= ($tipoConta == 'n' ? 'show' : 'hide') ?>">
              <label>Tipo Pessoa</label>
              <select name="beneficiario[<?= $i ?>][tp_pessoa]" id="tp_pessoa_<?= $i ?>" class="tp_pessoa check">
                <option value="F" <?
                echo($values[$i]['tp_pessoa'] == 'F' ? 'selected' : ''); ?>>Física
                </option>
                <option value="J" <?
                echo($values[$i]['tp_pessoa'] == 'J' ? 'selected' : ''); ?>>Jurídica
                </option>
              </select>
            </div>

            <div class="field">
              <label>CPF/CNPJ</label>
              <input type="text" name="beneficiario[<?= $i ?>][nr_cpf_cnpj]" value="<?= $values[$i]['nr_cpf_cnpj'] ?>"
                     id="nr_cpf_cnpj_<?= $i ?>" data-posicao="<?= $i ?>" size="16" class="check beneficiario_cpf_cnpj"
                     onblur="validarCpfCnpj(this); buscarBeneficiario(this);"/>
             
            </div>

            <div class="div_<?= $i ?>_N field <?= ($tipoConta == 'n' ? 'show' : 'hide') ?>">
              <label>A favor de</label>
              <input type="text" style="width:550px" name="beneficiario[<?= $i ?>][ds_nome_beneficiarios]" class="check"
                     value="<?= $values[$i]['ds_nome_beneficiarios'] ?>" id="ds_nome_beneficiarios_<?= $i ?>"/>
               <input type="hidden" name="id_beneficiario_" id="id_beneficiario_<?= $i ?>">
            </div>

            <div class="div_<?= $i ?>_N div_fl_nome_social_<?=$i?> field <?= ($tipoConta == 'n' ? 'show' : 'hide') ?>" >
              <?php
                $checkNaoNomeSocial = $values[$i]['fl_nome_social'] == 0 ? 'checked' : '';
                $checkSimNomeSocial = $values[$i]['fl_nome_social'] == 1 ? 'checked' : '';
              ?>
              <label>Deseja informar o nome social?</label>
              <input type="radio" id="fl_nome_social_1_<?=$i?>" class="fl_nome_social_1 check" value="1" name="beneficiario[<?=$i?>][fl_nome_social]" <?=$checkSimNomeSocial?>>
              &nbsp; Sim &nbsp;
              <input type="radio" id="fl_nome_social_0_<?=$i?>"  class="fl_nome_social_0 check" value="0" name="beneficiario[<?=$i?>][fl_nome_social]" <?=$checkNaoNomeSocial?>>
              &nbsp; Não
            </div>

            <div class="div_ds_nome_social_<?=$i?> field">
              <label for="ds_nome_social_<?=$i?>">Nome Social</label>
              <input type="text" style="width:550px" name="beneficiario[<?= $i ?>][ds_nome_social]" class="upper ds_nome_social"
                     value="<?= $values[$i]['ds_nome_social'] ?>" id="ds_nome_social_<?= $i ?>" <?=$checkSimNomeSocial ? '' : 'disabled'?>/>
            </div>

            <div class="div_<?= $i ?>_S field <?= ($tipoConta == 's' ? 'show' : 'hide') ?>">
              <label>A favor de</label>
              <select name="beneficiario[<?= $i ?>][id_banco]" id="id_banco_<?= $i ?>" class="check readonly_background_disabled element_disabled">
                <option value=""></option>
                  <?
                  foreach ($Bancos as $key => $value) {
                      $selected = '';
                      if ($key == $values[$i]['id_banco']) {
                          $selected = 'selected';
                      }
                      ?>
                    <option value="<?= $key ?>" <?= $selected ?>><?= $value ?></option>
                      <?
                  } ?>
              </select>
            </div>

            <div class="field hide">
              <label>Agência</label>
              <input type="text" name="beneficiario[<?= $i ?>][ds_agencia]" class="check"
                     value="<?= $values[$i]['ds_agencia'] ?>" id="ds_agencia_<?= $i ?>" size="10" readonly/>
            </div>

            <div class="field">
              <label>Na qualidade de</label>
              <input type="text" name="beneficiario[<?=$i?>][ds_qualidade_beneficiario]" class="check" value="<?=$values[$i]['ds_qualidade_beneficiario']?>" id="ds_qualidade_beneficiario_<?=$i?>" size="22" />
            </div>

              <?php
              $classTipoBeneficiario = $tipoConta === 's' ? 'hide' : 'show';
              ?>

            <div class="field <?=$classTipoBeneficiario?>" id="divTipoBeneficiario_<?=$i?>">
              <label>Tipo de Beneficiário</label>
                <?php
                $tiposBeneficiarios = (new Seguro_Model_TiposBeneficiarios())->getCombo();
                ?>
              <select name="beneficiario[<?=$i?>][id_tipo_beneficiario]" id="id_tipo_beneficiario_<?=$i?>" class="check">
                  <?php
                  foreach ($tiposBeneficiarios as $indice => $tipoBeneficiario) {
                      $selected = '';
                      $disabled = '';

                      if ($values[$i]['tp_pessoa'] == 'F' && $indice === 3) {
                          $selected = "selected";
                      }

                      if ($values[$i]['tp_pessoa'] == 'J' && $indice === 3) {
                          $disabled = "disabled";
                      }

                      if (!empty($values[$i]['id_tipo_beneficiario']) && $values[$i]['id_tipo_beneficiario'] == $indice) {
                          $selected = "selected";
                      }
                      ?>
                    <option value="<?=$indice?>" <?=$selected?> <?=$disabled?>><?=$tipoBeneficiario?></option>
                      <?php
                  }
                  ?>
              </select>
            </div>

            <div class="field <?= ($values[$i]['tp_pessoa'] == 'F' ? 'show' : 'hide') ?>" id="div_<?= $i ?>_dt">
              <label for="beneficiario[<?= $i ?>][dt_nascimento_beneficiario]">Dt. Nascimento</label>
              <input type="text" name="beneficiario[<?= $i ?>][dt_nascimento_beneficiario]"
                     id="beneficiario[<?= $i ?>][dt_nascimento_beneficiario]"
                     value="<?= Agro_Util::formatDate($values[$i]['dt_nascimento'], Zend_Date::DATES) ?>"
                     class="data-beneficiario check" maxlength="10" size="11"/>
            </div>

            <div class="field">
              <label>E-mail</label>
              <input type="text" name="beneficiario[<?=$i?>][ds_email_beneficiario]" value="<?=$values[$i]['ds_email_beneficiario'];?>" id="ds_email_beneficiario_<?=$i?>" size="45" class="check beneficiario_email validarEmail" />
            </div>

            <div class="field">
              <label>Até a quantia</label>
              <input type="text" name="beneficiario[<?= $i ?>][vl_limite_beneficio]"
                     value="<?= Agro_Util::formatDbCurrency($values[$i]['vl_limite_beneficio']); ?>"
                     id="vl_limite_beneficio_<?= $i ?>" size="10" class="currency check"/>
            </div>

            <div class="field">
              <label>Vinculado à Financiamento?</label>
              <select name="beneficiario[<?=$i?>][fl_vinculada_financiamento]" class="check fl_vinculada_financiamento" id="fl_vinculada_financiamento_<?=$i?>">
                <option value="0">NÃO</option>
                <option value="1" <?=!empty($values[$i]['ds_email_instituicao_financeira']) ? 'selected' : ''?>>SIM</option>
              </select>
            </div>

            <div class="field <?=!empty($values[$i]['ds_email_instituicao_financeira']) ? 'show' : 'hide'?>"  id="tr_email_instituicao_<?=$i?>">
              <label>E-mail do responsável</label>
              <input type="email" id="ds_email_instituicao_financeira_<?=$i?>" class="check validarEmail" value="<?=$values[$i]['ds_email_instituicao_financeira'];?>" name="beneficiario[<?=$i?>][ds_email_instituicao_financeira]" size="45">
            </div>
          </div>
          <br class="clear"/>
            <?
        }
    }
}
