<?php

require_once 'connect.php';
require_once 'inc/messages.php';

// retorna array com lista, ou false se deu erro
function tabela_precos_getAll() {
  global $conexao;
  $sql = 'select * from erpc_tabela_precos where st_ativo=?';
  $values[] = '1';
  $result = _prepareAndQuery($sql, $values);
  return $result;
}

// retorna array associativo com objeto, ou false se deu erro/não encontrar
function tabela_precos_getById($id) {
  global $conexao;
  $sql = 'select tp.*, u.ds_fantasia as ds_unidade, r.ds_regiao, cp.ds_condicao
    from erpc_tabela_precos tp
    left join erpc_unidades u on (u.id=tp.id_unidade)
    left join erpc_regiao r on (r.id=tp.id_regiao)
    left join erpc_condicao_pagamento cp on (cp.id=tp.id_condicao_pagamento)
    where tp.id=? and tp.st_ativo=1';
  $values[] = $id;
  $result = _prepareAndQuery($sql, $values);
  if ($result !== false) {
    if (count($result) === 1) {
      $result = $result[0];
      $itens = tabela_precos_item_getById($id);
      // se não tiver itens, cria um array vazio
      if ($itens === false) {
        $result = false;
        addError('Erro ao carregar os itens');
      } else {
        $result['itens'] = $itens;
        // já formato os campos aqui? por hora sim...
        foreach($result as $k => $v) {
          $result[$k] = sgcws_format_field($k, $v);
        }
      }
    } else {
      $result = false;
      addError('Id não encontrado');
    }
  }

  return $result;
}

// retorna array associativo com objeto, ou false se deu erro/não encontrar
function tabela_precos_item_getById($id_pai) {
  global $conexao;
  $sql = 'select tpi.*, p.ds_produto from erpc_tabela_precos_item tpi join erpc_produtos p on (p.id = tpi.id_produto) where tpi.id_tabela_precos=?';
  $values[] = $id_pai;
  $result = _prepareAndQuery($sql, $values);
  return $result;
}

// insere novo
function tabela_precos_insert($tabela_precos, &$error=null) {
  global $conexao;
  $ok = false;
  $sql = 'insert into erpc_tabela_precos ';
  $campos = array('id_unidade', 'id_regiao', 'ds_tabela', 'dh_inicio', 'dh_fim', 'id_condicao_pagamento', 'dh_alteracao', 'id_usuario', 'st_ativo');
  $values = array();
  foreach($campos as $campo) {
    $values[] = $tabela_precos[$campo];
  }
  $sql .= '(' . implode(',', $campos) . ') values (' . trim(str_repeat('?,', count($values)), ',') . ')';
  $ok = _prepareAndExecute($sql, $values, $error);
  if ($ok !== false) {
    $tabela_precos['id'] = mysqli_insert_id($conexao);
    $ok = tabela_precos_item_insert($tabela_precos, $error);
    if ($ok && $error === null) {
      addMessage('Inserido com sucesso');
    }
  }
  return $ok;
}

// insere novo item
function tabela_precos_item_insert($tabela_precos, &$error=null) {
  global $conexao;
  $ok = false;
  $itens = $tabela_precos['itens'];
  if (count($itens) > 0) {
    $sql = 'insert into erpc_tabela_precos_item ';
    $campos = array('id_tabela_precos', 'id_produto', 'vl_preco_venda', 'vl_desconto', 'st_ativo');
    $sql .= '(' . implode(',', $campos) . ') values ';
    $sql .= '(' . trim(str_repeat('?,', count($campos)), ',') . ')';
    $values = array();
    foreach($itens as $item) {
      if (!empty($item['id_produto'])) {
        $item['id_tabela_precos'] = $tabela_precos['id'];
        foreach($campos as $campo) {
          if (in_array($campo, ['st_ativo'])) {
            $values[] = isset($item[$campo]) ? '1' : '0';
          } else {
            $values[] = $item[$campo];
          }
        }
      }
    }
    // remove última ','
    if (empty($values)) {
      // nada para inserir
      $ok = true;
    } else {

      echo "preparando e executando : $sql<br>";

      foreach ($values as $key => $value) {
        # code...
        echo "indice $key=$value;" . "<br>";
      }

      exit;

      $ok = _prepareAndExecute($sql, $values, $error, true);
    }
  } else {
    // nada para inserir
    $ok = true;
  }
  return $ok;
}

// atualiza o objeto passado no bd
function tabela_precos_update($tabela_precos) {
  global $conexao;
  $ok = false;
  $sql = 'update erpc_tabela_precos set ';
  $campos = array('id_unidade', 'id_regiao', 'ds_tabela', 'dh_inicio', 'dh_fim', 'id_condicao_pagamento', 'dh_alteracao', 'id_usuario', 'st_ativo');
  $values = array();
  foreach($campos as $campo) {
    $sql .= $campo . '=?,';
    $values[] = $tabela_precos[$campo];
  }
  $sql = trim($sql, ',');
  $sql .= ' where id = ?';
  $values[] = $tabela_precos['id'];
  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    $ok = tabela_precos_item_update($tabela_precos);
    if ($ok !== false) {
      addMessage('Atualizado com sucesso');
    }
  }
  return $ok;
}

// atualiza os itens do objeto passado no bd, apaga tudo e insere de novo
function tabela_precos_item_update($tabela_precos) {
  global $conexao;
  $ok = false;
  $sql = 'delete from erpc_tabela_precos_item where id_tabela_precos=?';
  $values = array($tabela_precos['id']);
  $ok = _prepareAndExecute($sql, $values);
  if ($ok !== false) {
    $ok = tabela_precos_item_insert($tabela_precos);
  }
  return $ok;
}

function tabela_precos_delete($tabela_precos) {
  global $conexao;
  $ok = false;
  $sql = 'update erpc_tabela_precos set st_ativo = 0';
  $values = array();
  $sql .= ' where id = ?';
  $values[] = $tabela_precos['id'];
  $ok = _prepareAndExecute($sql, $values);
  if ($ok) {
    $ok = tabela_precos_item_delete($tabela_precos);
  }
  if ($ok !== false) {
    addMessage('Removido com sucesso');
  }
  return $ok;
}

function tabela_precos_item_delete($tabela_precos) {
  global $conexao;
  $ok = false;
  $sql = 'update erpc_tabela_precos_item set st_ativo = 0 where id_tabela_precos=?';
  $values = array($tabela_precos['id']);
  $ok = _prepareAndExecute($sql, $values);
  return $ok;
}

function tabela_precos_create() {
  require_once 'inc/usuario.php';
  $u = getLoggedUser();
  $tabela_precos = array(
    'id' => '',
    'id_unidade' => '',
    'id_regiao' => '',
    'ds_tabela' => '',
    'dh_inicio' => '',
    'dh_fim' => '',
    'id_condicao_pagamento' => '',
    'dh_alteracao' => date('d/m/Y H:i'),
    'id_usuario' => $u['id'],
    'st_ativo' => '1',
    'itens' => array(),
    'ds_unidade' => '',
    'ds_regiao' => '',
    'ds_condicao' => '',
  );
  return $tabela_precos;
}

function tabela_precos_item_create() {
  $tabela_precos = array(
    'id_tabela_precos' => '',
    'id_produto' => '',
    'vl_preco_venda' => '',
    'vl_desconto' => '',
    'st_acao' => '0',
    'dh_alteracao' => date('d/m/Y H:i'),
    'st_ativo' => '1',
    'ds_produto' => '',
  );
  return $tabela_precos;
}
