<?php

class Wsceo extends Wsceobase
{

  public function getNFEXml($pedido_id_futura)
  {
    $retorno = parent::callJson(parent::$API_URL . 'notafiscalxml?pedido=' . $pedido_id_futura);
    return $retorno;
  }

  public function getCalcularST($json)
  {

    $wbsreturn = parent::callJson(parent::$API_URL . 'calculast', $json);

    if ($this->config->get('config_error_log')) {
      $logData = [
        'event'    => 'calcular_st',
        'message'  => 'Erro ao calcular o ST',
        'url' => parent::$API_URL . 'calculast',
        'json' => $json,
        'wbsreturn' => $wbsreturn,
      ];
      $this->log->write(json_encode($logData, JSON_UNESCAPED_UNICODE));
    }

    if ((!$wbsreturn) || (!array_key_exists("Produtos", $wbsreturn))) {
        return false;
    } else{
        return $wbsreturn['Produtos'];
    }

    /*$retorno = array();
    foreach ($wbsreturn['Produtos'] as $produto) {
      $retorno[$produto['ProdutoId']] = $produto;
    }*/

    return $retorno;
  }

  public function getConsultaFromSql($sql)
  {
    $consulta['consulta'] = array($sql);
    $wbsreturn = parent::callJson(parent::$API_URL . 'consulta', json_encode($consulta));
    if ((!$wbsreturn) || ((array_key_exists('result', $wbsreturn)) && ( (!is_array($wbsreturn['result'][0])) || (count($wbsreturn['result'][0]) == 0)))) {
      return false;
    } else {
      return $wbsreturn['result'][0];
    }
  }


  public function getConsulta($sql){
    $consulta['consulta'] = array($sql);
    $wbsreturn = parent::callJson(parent::$API_URL . 'consulta', json_encode($consulta));

    switch (substr($this->getHttpCode(),0,1)){
      case Type_ServidorStatus::Tp_Success :
        return $wbsreturn['result'][0] ?? false;
      break;
      case Type_ServidorStatus::Tp_ErrorClient :
        return false;
      break;
      case Type_ServidorStatus::Tp_ErrorServer :
        return Type_ServidorStatus::Tp_ErrorServer;
      break;
    }
  }

  public function getConsultaFromSqlCache($sql)
  {
    //Consulta com cache de 3h
    $cacheId = md5('wsceocache3h' . $sql);

    $data = $this->cache->get($cacheId);

    if ($data) {
      if ((!$data) || ((array_key_exists('result', $data)) && ((!is_array($data['result'][0])) || (count($data['result'][0]) == 0)))) {
        return false;
      } else {
        return $data['result'][0];
      }
    } else {
      $consulta['consulta'] = array($sql);
      $wbsreturn = parent::callJson(parent::$API_URL . 'consultasemcache', json_encode($consulta));
      $this->cache->set($cacheId, $wbsreturn, 10800 /* valor em segundos(3 horas) */);
      if ((!$wbsreturn) || ((array_key_exists('result', $wbsreturn)) && ((!is_array($wbsreturn['result'][0])) || (count($wbsreturn['result'][0]) == 0)))) {
        return false;
      } else {
        return $wbsreturn['result'][0];
      }
    }
  }

  public function getConsultaFromSqlSemCache($sql)
  {
    $consulta['consulta'] = array($sql);
    $wbsreturn = parent::callJson(parent::$API_URL . 'consultasemcache', json_encode($consulta));
    if ((!$wbsreturn) || ((array_key_exists('result', $wbsreturn)) && ((!is_array($wbsreturn['result'][0])) || (count($wbsreturn['result'][0]) == 0)))) {
      return false;
    } else {
      return $wbsreturn['result'][0];
    }
  }

  public function executeSql(array $sql)
  {
    $consulta['execute'] = $sql;
    $wbsreturn = parent::callJson(parent::$API_URL . 'execute', json_encode($consulta));
    return $wbsreturn;
  }

  public function getLinksDanfeXml($xmlNotaFiscal)
  {
    $retorno = parent::callJson(parent::$API_NFE_URL, json_encode($xmlNotaFiscal));
    if ((!$retorno) || ((array_key_exists('result', $retorno)) && (!$retorno['result']))) {
      return false;
    } else {
      return $retorno;
    }
  }

  public function validateCeoAuth()
  {
    $request = parent::callJson(parent::$API_URL . 'pong', null, 'POST');
    $result = array('request' => $request, 'http_code' => $this->getHttpcode(), 'error' => $this->getError());

    return $result;
  }

}
