<?php

loadController('base/module');

class ControllerModuleListapresente extends ControllerBaseModule {

    protected $referencePathFile = 'module/listapresente';

    private $post  = [];

    private $error = array();

    protected function loadModel() {
        $this->load->model('futura/listapresente');
        $this->load->model('localisation/language');
        $this->load->model("localisation/order_status");

        $this->load->dmodel("tool/image");

        parent::loadModel();
    }

    protected function loadLanguage()
    {
        parent::loadLanguage();
        $language = $this->load->language('module/listapresentedetalhes');
        $this->dataVue = array_merge($this->dataVue, $language);
    }

    protected function loadData() {
        parent::loadData();
        $this->load->library('image_validate');
        $image_validate = new Image_validate();

        $this->dataVue['Type_Status'] = Type_Status::getEnumList();
        $this->dataVue['Type_DsimDnao'] = Type_DsimDnao::getEnumList();

        $this->dataVue['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
        $this->dataVue['categories'] = $this->model_futura_listapresente->getCategorias();
        $this->dataVue['languages'] = $this->model_localisation_language->getLanguages();
        $this->dataVue['configurations']['futuralistapresente_cat_habilitas'] = str_replace(' ', '', $this->config->get('futuralistapresente_cat_habilitas'));

        $this->dataVue['no_image'] = $this->dmodel_tool_image->resize(
            'no_image.jpg',
            Type_MiniatureMedium::Tp_width,
            Type_MiniatureMedium::Tp_height
          );

        $this->dataVue['msg_warning'] = $this->dataVue['warning_delete_category'];

        $listas = $this->model_futura_listapresente->getListas();
        $this->dataVue['lists'] = array();
        $this->dataVue['list_user_info'] = array();
        foreach ($listas as $lista) {
            $valor_venda_confirmada = $this->model_futura_listapresente->ValorTotalVendaConfirmadaByLista($lista['id_lista']);
            $valor_total_itens_disponiveis = $this->model_futura_listapresente->ValorTotalItensDisponiveisByLista($lista['id_lista']);
            $valor_total_pedido = $this->model_futura_listapresente->ValorTotalItensPedidoByLista($lista['id_lista']);
            $this->dataVue['lists'][] = array(
                "id" => $lista['id_lista'],
                "nome" => $lista['nome_lista'],
                "cliente" => $lista['firstname'] . " " . $lista['lastname'],
                "data_validade" => implode("/", array_reverse(explode("-", $lista['data_valid_lista']))),
                "data_lista" => implode("/", array_reverse(explode("-", $lista['data_cad_lista']))),
                "data_evento" => implode("/", array_reverse(explode("-", $lista['data_eve_lista']))),
                "categoria" => $lista['desc_cat_lista'],
                "status" => $lista['status_lista'] == 0 ? 'Desabilitado' : 'Habilitado',
                "itens" => 0 < $lista['qtde'] ? $lista['qtde'] : 0,
                "vendidos" => $lista['totalVendido'],
                "estoque" => $lista['qtde'] ? $lista['qtde'] : 0,
                "venda_confirmada" => $this->currency->format($valor_venda_confirmada),
                "valor_total" => $this->currency->format($valor_total_itens_disponiveis + $valor_total_pedido),
                "valor_itens_disponiveis" => $valor_total_itens_disponiveis,
            );
            $lista_info = $this->model_futura_listapresente->getLista($lista['id_lista']);

            $this->data['produtos'] = array();

            if (isset($lista_info)) {
                foreach ($lista_info['produtos'] as $produto) {
                    $compradores = $this->model_futura_listapresente->getCompProd($lista_info['id'], $produto['id']);

                    $exist_product_image = file_exists(DIR_IMAGE . $produto['imagem']);

                    $watermark_config_date_number = $this->dmodel_tool_image->getWatermarkCacheNumber();
                    $image_version_number = '?version=' . preg_replace("/[^0-9]/", "", $produto['data_atualizacao_replicacao']) . $watermark_config_date_number;

                    $imagem = ($produto['imagem'] && $exist_product_image && $image_validate->isValidate($produto, true))
                        ? ($this->dmodel_tool_image->resizeWithWatermark($produto['imagem'], Type_MiniatureMedium::Tp_width, Type_MiniatureMedium::Tp_height) . $image_version_number)
                        : $this->dataVue['no_image'];

                    $this->data['produtos'][] = array(
                    "item" => $produto['item_id'],
                    "nome" => $produto['nome'],
                    "imagem" => $imagem,
                    "qtde" => $produto['qtde'],
                    "valor" => $this->currency->format($produto['valor']),
                    "qtdeComp" => $produto['qtdeComp'],
                    "compradores" => $compradores,
                    );
                }
                $lista_info['produtos'] = $this->data['produtos'];
            }

            $this->dataVue['list_user_info'][] = $lista_info;
        }
    }

    protected function actionUrls()
    {
        parent::actionUrls();
        $this->dataVue['actionNewCategory'] = $this->url->link("module/listapresente/newCategory", "token=" . $this->session->data['token'] . '&type=' . $this->request->get['type'], "SSL");
        $this->dataVue['actionDeleteCategory'] = $this->url->link("module/listapresente/deleteCategory", "token=" . $this->session->data['token'] . '&type=' . $this->request->get['type'], "SSL");
        $this->dataVue['actionUpdateDescriptionCategory'] = $this->url->link("module/listapresente/updateDescriptionCategory", "token=" . $this->session->data['token'] . '&type=' . $this->request->get['type'], "SSL");

    }

    public function updateDescriptionCategory(){
        $this->load->model('futura/listapresente');
        $categories = $this->model_futura_listapresente->updateDescriptionCategorias($this->request->post['description_Category'],trim($this->request->post['id_category']) );
        $this->response->setOutputJson(['categories' => $categories]);
    }

    public function newCategory() {
        $this->load->model('futura/listapresente');

        if (!isset($this->request->post['description']) || trim($this->request->post['description']) == '' ) {
            return $this->response->setOutputJson(['error' => 'A descrição é obrigatória']);
        }

        $categories = $this->model_futura_listapresente->addCategorias($this->request->post['description']);
        $this->response->setOutputJson(['categories' => $categories]);
    }

    public function deleteCategory(){
        $this->load->language('module/listapresente');
        $this->load->model('setting/setting');
        $ArrayEnabled = $this->model_setting_setting->getSetting('listapresente');

        $ArrayList = explode(',',$ArrayEnabled['futuralistapresente_cat_habilitas']);

        if((count($ArrayList) > 1)){
            return $this->removeCategoryFromDb($ArrayList);
        }else if(in_array(trim($this->request->post['id_Category']),$ArrayList)) {
            return $this->response->setOutputJson(['error' => $this->language->get('warning_checked_category')]);
        }else {
            return $this->removeCategoryFromDb($ArrayList);
        }
    }

    private function removeCategoryFromDb($ArrayList){
        $this->load->model('futura/listapresente');
        $this->load->language('module/listapresente');

        $category_was_removed = $this->model_futura_listapresente->removeCategorias(trim($this->request->post['id_Category']));

        if ($category_was_removed){

            $idx_category = array_search(trim($this->request->post['id_Category']),$ArrayList);
            if(!$idx_category === false){
                unset($ArrayList[$idx_category]);
                $this->model_setting_setting->editSettingValue('listapresente','futuralistapresente_cat_habilitas', implode(',',$ArrayList), 0);
            }

            return $this->response->setOutputJson(['success' => $this->language->get('text_success')]);
        }else{
            return $this->response->setOutputJson(['error' => $this->language->get('text_error')]);
        }

    }

    protected function validate()
    {
        $this->load->type('tipocomum');
        extract($this->request->post);

        $errors = $this->validate->execute([
        'futuralistapresente_cat_habilitas' => [
            'value' => trim($futuralistapresente_cat_habilitas) ?? '',
            'validates' => ['isEmpty'],
        ],
        'futuralistapresente_config_image_lista_width' => [
            'value' => $futuralistapresente_config_image_lista_width ?? '',
            'validates' => ['isEmpty'],
        ],
        'futuralistapresente_config_image_lista_height' => [
            'value' => $futuralistapresente_config_image_lista_height ?? '',
            'validates' => ['isEmpty'],
        ]
        ]);

        return $errors;
    }

}
