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


class Controllermercadolivremelijobs extends ControllerMarketplaceMktJobs
{

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

    }

  public  function atualizarPedidos(){
      $this->ftrgeralregistry->permissaoAcessoUrl($this->dmodel_setting_task->getTaskByType(Type_TaskUrl::Tp_TaskMLPedido));

      if($this->config->get('mercadolivre_status')) {
          $data = array(
            'date_last_acting' => $this->db->dataAtual(),
            'type' => Type_TaskUrl::Tp_TaskMLPedido
          );
          $this->dmodel_setting_task->editDateTaskByType($data);

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

          $this->load->dmodel('mercadolivre/melipedido');
          
          try {
            $lastSearchMissedFeed = $this->config->get('mercadolivre_last_search_missed_feed') ?? null;
            if (is_null($lastSearchMissedFeed) || $lastSearchMissedFeed < (time() - 7600)) { //Rodar a cada 2 horas
                $this->dmodel_mercadolivre_melipedido->SearchMissedFeed();
                $this->load->model('setting/setting');
                $this->model_setting_setting->editSettingForKey('mercadolivre', ['mercadolivre_last_search_missed_feed' => time()]);
            }
          } catch (\Throwable $th) {
            $this->log->write('Erro ao pegar notificações perdidas' . $th->getMessage());
          }

          $this->dmodel_mercadolivre_melipedido->processAPIOrder($tempoLimite);
      }else{
          throw new Exception('Configuração de verificação de pedidos desabilitada!');
      }
  }

    public function notificarStatusOrders()
    {
        /*if($this->config->get('mercadolivre_status')) {
          $result = $this->dmodel_setting_task->getTaskByType(Type_TaskUrl::Tp_TaskMLNfe);
          ini_set('max_execution_time', Type_ExecTimeTask::Tp_ExecTime_1min);

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

          $this->load->dmodel('mercadolivre/melipedido');
          $this->dmodel_mercadolivre_melipedido->sendNfesML();
        }else{
          throw new Exception('Configuração de notificação de pedidos desabilitada!');
        }*/
    }


    public function metrics(){
        $this->ftrgeralregistry->permissaoAcessoUrl($this->dmodel_setting_task->getTaskByType(Type_TaskUrl::TP_TaskMlMetrics));

        if($this->config->get('mercadolivre_status')) {
            $data = array(
              'date_last_acting' => $this->db->dataAtual(),
              'type' => Type_TaskUrl::TP_TaskMlMetrics
            );
            $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('mercadolivre/meliproduto');
            $this->dmodel_mercadolivre_meliproduto->getMetrics($tempoLimite);

        }else{
            throw new Exception('Configuração de metricas de anúncios do mercadolivre desabilitada!');
        }
    }

    public function getinformation()
    {

        $this->ftrgeralregistry->permissaoAcessoUrl($this->dmodel_setting_task->getTaskByType(Type_TaskUrl::TP_TaskMlMktInfos));

        if ($this->config->get('mercadolivre_status')) {

            ini_set('max_execution_time', Type_ExecTimeTask::Tp_ExecTime_1min);

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

            try {
                $this->load->dmodel('mercadolivre/melinoticies');
                $this->dmodel_mercadolivre_melinoticies->getApiNoticies();
            } catch (Exception $e) {
                echo $e->getMessage();
            }


        } else {
            throw new Exception('Configuração de informações do mercado livre desabilitada!');
        }
    }

    public function updateitems()
    {
        $this->ftrgeralregistry->permissaoAcessoUrl($this->dmodel_setting_task->getTaskByType(Type_TaskUrl::TP_TaskMLItems));

        if($this->config->get('mercadolivre_status')) {

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

            $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'));

            try{

                $this->load->dmodel('mercadolivre/meliproduto');
                $items = $this->dmodel_mercadolivre_meliproduto->getApiCallIdItems();

                if($items){
                    $this->load->dmodel('marketplace/mktproduto');
                    $items_groups = array_chunk($items, 50);

                    foreach ($items_groups as $items_group) {

                        foreach ($items_group as $key => $item){
                            try {

                                $this->db->startTransaction();
                                $itemML = $this->dmodel_marketplace_mktproduto->getTipoKeyMarketplace($item['callId'], Type_MarketPlace::Tp_Mercadolivre);
                                // essa condição foi alterada porque não estava permitindo atualizar produtos normais, vi com o dionis e tava errado mesmo
                                if ($itemML !== false) {
                                    $this->dmodel_marketplace_mktproduto->UpdateProductMarketPlace(null, $item['callId'], Type_MarketPlace::Tp_Mercadolivre, $itemML);
                                }
                                $this->db->query("UPDATE `" . DB_PREFIX . "marketplace_api_call` SET done = '1' WHERE tipo_integracao = " . Type_MarketPlace::Tp_Mercadolivre . " AND callId = '" . $item['callId'] . "' and callType='" . $item['callType'] . "'");
                                $this->db->commit();

                            } catch (Exception $e) {
                                $this->db->rollback();
                                throw $e;
                            }
                        }

                        if (($tempoLimite) && (new DateTime($this->db->dataAtual()) > $tempoLimite)){
                            break;
                        }

                    }

                }

            }catch(Exception $e){
                echo $e->getMessage();
            }

        }else{
            throw new Exception('Configuração de informações do mercado livre desabilitada!');
        }
    }

}