<?php
$loader = $this->registry->get('load');
$loader->controller('marketplace/mktjobs');

class Controllergaleriapagegpjobs extends ControllerMarketplaceMktJobs
{

  public function construct($registry)
  {
    parent::construct($registry);

  }

  public function atualizarPedidos()
  {
    if ($this->config->get('galeriapage_status')) {
      $this->load->dmodel('setting/task');
      $this->ftrgeralregistry->permissaoAcessoUrl($this->dmodel_setting_task->getTaskByType(Type_TaskUrl::TP_TaskGpPedido));

      $data = array(
        'date_last_acting' => $this->db->dataAtual(),
        'type' => Type_TaskUrl::TP_TaskGpPedido
      );
      $this->dmodel_setting_task->editDateTaskByType($data);

      $minutos = Type_ExecTimeTask::Tp_ExecTime_1min / 60;
      $tempoLimite = (new DateTime($this->db->dataAtual()))->add(new DateInterval('PT' . $minutos . 'M'));

      $this->load->dmodel('marketplace/mktpedido');
      $this->load->dmodel('galeriapage/gppedido');
      $this->dmodel_galeriapage_gppedido->proccessOrder($tempoLimite);
    } else {
      throw new Exception('Configuração de verificação de pedidos da Galeria Pagé desabilitada!');
    }
  }

  public function atualizarProdutos()
  {
    if ($this->config->get('galeriapage_status') && (isset($this->request->get['update']))) {

      $this->load->dmodel('marketplace/mktproduto');
      $this->load->dmodel('marketplace/mktprodutogaleriapage');
      $this->load->dmodel('setting/task');
      $this->load->type('tipocomum');

      ini_set('memory_limit', '32M');

      if (isset($this->request->get['update'])) {
        switch ($this->request->get['update']) {
          case 'produto':
            $this->ftrgeralregistry->permissaoAcessoUrl($this->dmodel_setting_task->getTaskByType(Type_TaskUrl::TP_TaskGpProduto));
            $result = $this->dmodel_setting_task->getTaskByType(['type' => Type_TaskUrl::TP_TaskGpProduto]);

            $dataTask = array(
              'date_last_acting' => $this->db->dataAtual(),
              'type' => Type_TaskUrl::TP_TaskGpProduto
            );
            $this->dmodel_setting_task->editDateTaskByType($dataTask);

            $minutos = Type_ExecTimeTask::Tp_ExecTime_3min / 60;
            $tempoLimite = (new DateTime($this->db->dataAtual()))->add(new DateInterval('PT' . $minutos . 'M'));

            $config_md5          = $this->config->get('galeriapage_configs_md5');
            $config_md5_mktfield = 'marketplace_config_md5';

            $data = array(
              'date_produto'        => true,
              'date_estoque'        => true,
              'config_md5'          => $config_md5,
              'config_md5_mktfield' => $config_md5_mktfield,
            );

            $dataUpdate = array($config_md5_mktfield => $config_md5);

            $results = $this->dmodel_marketplace_mktprodutogaleriapage->getMktProdutos($data);
            if (count($results) > 0) {
              $gpproducts = array_chunk($results, 10);
              foreach ($gpproducts as $key => $values) {
                $dataAtt = $this->db->dataAtual();
                $productReturnList = array();
                $productType = array();
                foreach ($values as $key => $value) {
                  try {

                    $productReturn = $this->dmodel_marketplace_mktproduto->synchronizeProductEstoquePrecoStatus($value['product_key_id'], $value['marketId'], Type_MarketPlace::Tp_Galeriapage, $value['tipo_produto'], false, true);

                    if ($productReturn) {
                        $productReturnList[$value['product_key_id']][Type_MarketPlace::Tp_Galeriapage] = $productReturn;
                        $productType[$value['product_key_id']][Type_MarketPlace::Tp_Galeriapage] = $value['tipo_produto'];
                    }

                  } catch (Exception $e) {
                    $this->dmodel_marketplace_mktproduto->setError($e->getMessage(), $value['product_key_id'], Type_MarketPlace::Tp_Galeriapage, $value['tipo_produto']);
                  }
                }
                foreach ($productReturnList as $product_id => $return) {

                    $dataUpdate = array_merge($dataUpdate, [
                        'marketplace_price_id' => (int)$return[Type_MarketPlace::Tp_Galeriapage]->getMarketplacePriceId(),
                        'marketplaceprice_config_md5' => $return[Type_MarketPlace::Tp_Galeriapage]->getMarketplacepriceConfigMd5(),
                        'date_att_price' => $dataAtt
                    ]);

                    $this->dmodel_marketplace_mktproduto->saveProductMarketPlaceFromProd($return[Type_MarketPlace::Tp_Galeriapage], $product_id, $productType[$product_id][Type_MarketPlace::Tp_Galeriapage],
                        $dataAtt, $dataAtt, $dataUpdate);
                }

                if (($tempoLimite) && (new DateTime($this->db->dataAtual()) > $tempoLimite)){
                  break;
                }
              }
            }
            break;
        }
      }
    } else {
      throw new Exception('Configuração de verificação de informações do produto desabilitada!');
    }
  }
}