<?php

use GuzzleHttp\Client;
//
//function FormataValor($cVal, $nLen, $nDec){
////{ Valida e formata uma sequencia caracteres para o formato VALOR
////********************************************************
//  //echo $cVal.' cValOri</br>';
//  $nLen = $nLen-$nDec;
//  $cVal = trim($cVal);
//  $lPt  = false;
//  $lOk  = true;
//
//  if ($cVal == ''){
//    $cVal = '0';
//  }else if (substr($cVal,0,1) == '.'){
//    $cVal = '0'.$cVal;
//  }
//  if (Trim($cVal) == SoString($cVal)) {
//    $cVal = '0';
//  }
//  $sit = array("0","1","2","3","4","5","6","7","8","9",",",".","-");
//
//  for ($x = 0; $x < strlen($cVal); $x++){
//    // echo $cVal[$x].'cvalx</br>';
//    // echo $lOk.'ok</br>';
//    if (!in_array($cVal[$x],$sit) ) {$lOk = false;}
//    //echo $lOk.'ok</br>';
//    if ($cVal[$x] == ','){$cVal[$x] = '.';}
//    //echo $lOk.'ok</br>';
//    if (($cVal[$x] == '.') and ($lPt == true)) {$lOk = false;}
//    //echo $lOk.'ok</br>';
//    if ($cVal[$x] == '.'){$lPt = true;}
//    //echo $lOk.'ok</br>';
//  }
//  //echo $lOk.'saiuok</br>';
//  //echo $lPt.'p</br>';
//
//  if ($lOk){
//    if ($cVal == ''){
//      $cVal = '0';
//    }else if (substr($cVal,0,1) == '.'){
//      $cVal = '0'.$cVal;
//    }
//    if (Trim($cVal) == soString($cVal)) {
//      $cVal = '0';
//    }
//    if (!$lPt){
//      $cVal = $cVal .'.0';
//    }
//
//    $l = StrLen(trim(substr($cVal, strpos('.',$cVal)+1, $nDec)));
//    if ($l < $nDec){
//      for ($y = $l; $y <= $nDec;$y++){
//        $cVal = $cVal . '0';
//      }
//    }
//  }else{
//    echo 'aqui';
//    $cVal = '0.0';
//  }
//  //echo "</br>--".$nDec."</br>";
//  //echo xPadL('55.00', 8);
//  //echo ;
//  return RemoveZeros(xPadL(substr($cVal, 0, strpos($cVal,'.')), $nLen) . '.' . substr($cVal, strpos($cVal,'.')+1, $nDec)); //trim dando pa
//}
function FormataValor($val, $casas){
  return number_format($val, $casas, ',', '.');
}



function SoString($string){
  $s = '';
  if ($string<>''){
    $s = preg_replace('/[0-9\@\.\;\-\""]+/', '', $string);
  }
  return $s;
}

function RemoveZeros($s){
  $n = false;
  if (substr($s, 1, 1) == '-') {
    $n = true;
    $s = preg_replace('-', '', $s);
  }
  $i = StrLen($s);
  $j = 1;
  $r = '';
  while (($j < $i) and ($s[$j] == 0)){
    $j++;
  }
  $r = substr($s, $j, ($i-$j)+1);
  return iif($n, '-', '') . iif(SoNumeros(substr($r, 1, 1)) == '', '0', '').$r;
}


function SoNumeros($numero){
  $s = '';
  if ($numero <> ''){
    $s = preg_replace("/[^0-9]/", "", $numero);
  }
  return $s;
}


function iif( bool $lFlag, $var1, $var2){
  if ($lFlag){
    return  $var1;
  }else{
    return $var2;
  }
}

//$c = xStrZero("   050,00", 8);
function xStrZero($s, $nLen){
  $s = xPadL($s, $nLen);
  for ($x = 0; $x < strlen($s); $x++){
    if ($s[$x] == ' '){
      $s[$x] = '0';
    }
    //echo $s.'</br>';
  }
  substr($s, 1, $nLen);
}


function xPadL($s, $nLen){
  if (strlen($s) <> $nLen){
    if (strlen($s) > $nLen){
      return substr($s,0,$nLen);
    }else{
      return xSpace($nLen-strlen($s)).$s;
    }
  }else{
    return $s;
  }
}

function xSpace($nLen){
  return xReplicate(' ', $nLen);
}

function xReplicate($c, $nLen){
  $r = '';
  for ($i = 1; $i <= $nLen; $i++){
    $r = $r.$c ;
  }
  return $r;
}


//gera numero verificador de autenticidade
function geradv($cStr){
  $nPar = (int) 0;
  $nImp = (int) 0;
  for($x = 0 ; $x < strlen($cStr); $x++) {
    if (($x/2) == intval($x/2)){
      $nPar = $nPar + ord($cStr[$x]);
    }else{
      $nImp = $nImp + ord($cStr[$x]);
    }
  }
    $x = str_pad(dechex(abs($nPar-$nImp)), 2,'0', STR_PAD_LEFT);
  return strtoupper($x);
}
//criptografa strings para hash compativel com sistema em delphi
function criptografa($cStr, $cCha){
  $cKey = $cCha;
  for ($c = 0; $c < strlen($cStr)+1;$c++){
      if(strlen($cKey) < strlen($cStr)){
        $cKey = $cKey . $cCha;
      }
    }
  $cRet = '';
  $cStr = $cStr;
  $cKey = $cKey;
  for ($x = 0; $x < (strlen($cStr));$x++){
      $y = ord($cStr[$x]) ^ ord($cKey[$x]);
      $cRet = $cRet . str_pad(dechex($y), 2,'0', STR_PAD_LEFT);
    }
  $cRet = strtoupper($cRet);
  $criptografa = $cRet.geradv($cRet);
  return $criptografa;
}
//descriptografa strings para hash compativel com sistema em delphi
function descriptografa($pwd, $key){
  $ret = "";
    $pwd = substr($pwd, 0, (strlen($pwd) - 2));
  $y = 0;
  for ($i = 0; $i < (strlen($pwd)-1); $i++){
    $aux = $i % 2;
    if($aux == 0){
      $hex = substr($pwd, $i, 2);
      $nChr = hexdec($hex);
      $nCha = ord(substr($key, $y, 1)); //$key.charAt($y);
      $ret = $ret.chr($nChr ^ $nCha);
      $y++;
      if($y > strlen($key)-1){
        $y = 0;
      }
    }
  }
  return $ret;
}


//converte de cor de hex para rgb e retorna preto ou branco
function cortext($hex) {
    $hex = str_replace("#", "", $hex);
    if(strlen($hex) == 3) {
      $r = hexdec(substr($hex,0,1).substr($hex,0,1))*2;
      $g = hexdec(substr($hex,1,1).substr($hex,1,1))*5;
      $b = hexdec(substr($hex,2,1).substr($hex,2,1));
    } else {
      $r = hexdec(substr($hex,0,2))*2;
      $g = hexdec(substr($hex,2,2))*5;
      $b = hexdec(substr($hex,4,2));
    }

    if (($r + $g + $b) < 1024){
      $cor = '#FFFFFF';
    }else{
      $cor = '#000000';
    }
    return $cor;
}
function diadasemana($data){
  $diasemana = array('Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sabado');
  $diasemana_numero = date('w', strtotime($data));
  $diaSemana =  $diasemana[$diasemana_numero];
  return $diaSemana;
}

function buscaCep($cep){
  $client = new Client([
    'base_uri' => 'https://viacep.com.br',
  ]);
  $statusCode = 200;
  $options = [];
  try {
    $response = $client->request(
      'GET',
      //'/web_cep.php?cep='.$cep.'&formato=json',
      '/ws/'.$cep.'/json',
      $options
    );
    $statusCode = $response->getStatusCode();
  } catch (Exception $e) {
    $msgError = strstr($e->getMessage(), 'response:', false);
    $msgError = empty($msgError) ? $e->getMessage() : $msgError;
    abort($e->getCode(), $msgError);
  }
    $res = $response->getBody()->getContents();
    return $res;
}
function buscaCepPorEndereco($estado, $cidade, $endereco){
  $client = new Client([
    'base_uri' => 'https://viacep.com.br',
  ]);
  $statusCode = 200;
  $options = [];
  try {
    $response = $client->request(
      'GET',
      'ws/'.$estado.'/'.$cidade.'/'.$endereco.'/json',
      $options
    );
    $statusCode = $response->getStatusCode();
  } catch (Exception $e) {
    $msgError = strstr($e->getMessage(), 'response:', false);
    $msgError = empty($msgError) ? $e->getMessage() : $msgError;
    abort($e->getCode(), $msgError);
  }
  $res = $response->getBody()->getContents();
  return $res;
}

function PegaDistanciGoogle($origem, $destino, $apiKey){
  $client = new Client([
    'base_uri' => 'http://192.168.15.99:8000', //trocar para 177
  ]);
  $statusCode = 200;
  $options = [
    'headers' => [
      'Accept' => 'application/json',
    ],
  ];
  $options['form_params'] = [
    'origem' => $origem,
    'destino' => $destino,
    'apiKey' => $apiKey,
  ];

  try {

    $response = $client->request(
      'POST',
      '/api/google/distance',
      $options
    );


    $statusCode = $response->getStatusCode();
  } catch (Exception $e) {
    dd($e);
    $msgError = strstr($e->getMessage(), 'response:', false);
    $msgError = empty($msgError) ? $e->getMessage() : $msgError;
    abort($e->getCode(), $msgError);
  }
  $res = $response->getBody()->getContents();
  return $res;
}

function mask($val, $mask){
  $maskared = '';
  $k = 0;
  for($i = 0; $i<=strlen($mask)-1; $i++) {
    if($mask[$i] == '#'){
      if(isset($val[$k]))
        $maskared .= $val[$k++];
    }else{
      if(isset($mask[$i]))
        $maskared .= $mask[$i];
    }
  }
  return $maskared;
}
function limita_caracteres($texto, $limite, $quebra = true){
  $tamanho = strlen($texto);
  if($tamanho <= $limite){ //Verifica se o tamanho do texto é menor ou igual ao limite
    $novo_texto = $texto;
  }else{ // Se o tamanho do texto for maior que o limite
    if($quebra == true){ // Verifica a opção de quebrar o texto
      $novo_texto = trim(substr($texto, 0, $limite))."...";
    }else{ // Se não, corta $texto na última palavra antes do limite
      $ultimo_espaco = strrpos(substr($texto, 0, $limite), " "); // Localiza o útlimo espaço antes de $limite
      $novo_texto = trim(substr($texto, 0, $ultimo_espaco))."..."; // Corta o $texto até a posição localizada
    }
  }
  return $novo_texto; // Retorna o valor formatado
}
