<?php

/**
 * AdminCategoria
 * Classe responsavel pelo controle das categorias
 * @copyrigth 2017, Welton Thierree TagPage
 */
class AdminCategoria {

    private $Data;
    private $CatId;
    private $Result;
    private $Error;

    //nome da tabela no banco de dados
    const Entidy = "tp_categorias";

    public function ExeCreate(array $Data) {
        $this->Data = $Data;
        if ($this->Data['categoria_titulo'] == ""):
            $this->Result = false;
            $this->Error = ['<b>Erro ao cadastrar</b> Preencha o campo nome', WS_ALERT];
        else:
            $this->setData();
            $this->setName();
            $this->Create();
        endif;
    }

    public function ExeUpdate($CatId, array $Data) {
        $this->CatId = (int) $CatId;
        $this->Data = $Data;

        if ($this->Data['categoria_titulo'] == ""):
            $this->Result = false;
            $this->Error = ['Preencha o campo nome', WS_ALERT];
        else:
            $this->setData();
            $this->setName();
            $this->Update();
        endif;
    }

    public function ExeDelete($CatId) {
        $this->CatId = (int) $CatId;

        $Read = new Read;
        $Read->ExeRead(self::Entidy, "WHERE categoria_id = :catid", "catid={$this->CatId}");

        if (!$Read->getResult()):
            $this->Result = false;
            $this->Error = ['Oppss, você tentou remover uma categoria que não existe no sistema!', WS_INFOR];
        else:
            extract($Read->getResult()[0]);
            if (!$this->CheckCat()):
                $this->upArtigoCat();
            endif;
            $Delete = new Delete;
            $Delete->ExeDelete(self::Entidy, "WHERE categoria_id = :delId", "delId={$this->CatId}");
            $this->Result = true;
            $this->Error = ["A <b>categoria {$categoria_titulo}</b> foi removida com sucesso!", WS_ACCEPT];
        endif;
    }

    function getResult() {
        return $this->Result;
    }

    function getError() {
        return $this->Error;
    }

    //Private
    private function setData() {
        $this->Data = array_map('strip_tags', $this->Data);
        $this->Data = array_map('trim', $this->Data);
        $this->Data['categoria_nome'] = Check::Name($this->Data['categoria_titulo']);
        $this->Data['categoria_data'] = date('Y-m-d H:i:s');
        $this->Data['categoria_parent'] = ($this->Data['categoria_parent'] == "" ? NULL : $this->Data['categoria_parent']);
    }

    private function setName() {
        $Where = (!empty($this->CatId) ? "categoria_id != {$this->CatId} AND" : '');

        $readName = new Read;
        $readName->ExeRead(self::Entidy, "WHERE {$Where} categoria_titulo = :t", "t={$this->Data['categoria_titulo']}");
        if ($readName->getResult()):
            $this->Data['categoria_nome'] = $this->Data['categoria_nome'] . '-' . $readName->getRowCount();
        endif;
    }

    private function CheckCat() {
        $ReadSub = new Read;
        $ReadSub->ExeRead("tp_produtos", "WHERE categoria_id = :catid", "catid={$this->CatId}");
        if ($ReadSub->getResult()):
            return false;
        else:
            return true;
        endif;
    }

    private function upArtigoCat() {
        $Dados['artigo_cat_parent'] = NULL;
        $Dados['artigo_categoria'] = 1;

        $Update = new Update;
        $Update->ExeUpdate("tp_artigos", $Dados, "WHERE artigo_categoria = :catId", "catId={$this->CatId}");
    }

    private function Create() {
        $Create = new Create;
        $Create->ExeCreate(self::Entidy, $this->Data);
        if ($Create->getResult()):
            $this->Result = $Create->getResult();
            $this->Error = ["<b>Sucesso:</b> A categoria {$this->Data['categoria_titulo']} foi cadastrada no sistema", WS_ACCEPT];
        endif;
    }

    private function Update() {
        $Update = new Update;
        $Update->ExeUpdate(self::Entidy, $this->Data, "WHERE categoria_id = :catid", "catid={$this->CatId}");
        if ($Update->getResult()):
            $this->Result = true;
            $this->Error = ["<b>Sucesso:</b> A categoria {$this->Data['categoria_titulo']} foi atualizada no sistema", WS_ACCEPT];
        endif;
    }

}
