<?php

/**
 * AdminPost.class [TIPO]
 * Responsável por gerenciar os fabricantes no admin do sistema!
 * 
 * @copyright (c) year, Welton Thierree TagPage
 */
class AdminFabricante {

    private $Data;
    private $FabId;
    private $Error;
    private $Result;

    //Nome da tabela no banco de dados
    const Entidy = 'tp_fabricantes';

    public function ExeCreate(array $Data) {
        $this->Data = $Data;

        if (in_array('', $this->Data)):
            $this->Error = ["Erro ao cadastrar: Para cadastrar um fabricante, favor preencha todos os campos!", WS_ALERT];
            $this->Result = false;
        else:
            $this->setData();
            $this->setName();

            if ($this->Data['fabricante_img']):
                $upload = new Upload('../uploads/fabricantes/');
                $upload->Image($this->Data['fabricante_img'], $this->Data['fabricante_nome']);
            endif;

            if (isset($upload) && $upload->getResult()):
                $this->Data['fabricante_img'] = $upload->getResult();
                $this->Create();
            else:
                $this->Data['fabricante_img'] = null;
                $this->Create();
            endif;
        endif;
    }

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

        if (in_array('', $this->Data)):
            $this->Error = ["Para atualizar este fabricante, preencha todos os campos (Capa não precisa ser enviada)", WS_ALERT];
            $this->Result = false;
        else:
            $this->setData();
            $this->setName();

            if (is_array($this->Data['fabricante_img'])):
                $readCapa = new Read;
                $readCapa->ExeRead(self::Entidy, "WHERE fabricante_id = :fabricante", "fabricante={$this->FabId}");
                $capa = '../uploads/fabricantes/' . $readCapa->getResult()[0]['fabricante_img'];

                if (file_exists($capa) && !is_dir($capa)):
                    unlink($capa);
                endif;

                $uploadCapa = new Upload('../uploads/fabricantes/');
                $uploadCapa->Image($this->Data['fabricante_img'], $this->Data['fabricante_nome']);
            endif;

            if (isset($uploadCapa) && $uploadCapa->getResult()):
                $this->Data['fabricante_img'] = $uploadCapa->getResult();
                $this->Update();
            else:
                unset($this->Data['fabricante_img']);
                $this->Update();
            endif;

        endif;
    }

    public function ExeDelete($FabId) {
        $this->FabId = (int) $FabId;
        $ReadPost = new Read;
        $ReadPost->ExeRead(self::Entidy, "WHERE fabricante_id = :id", "id={$this->FabId}");

        if (!$ReadPost->getResult()):
            $this->Error = ["O fabricante que você tentou deletar não existe no sistema!", WS_ERROR];
            $this->Result = false;
        else:
            $FabDelete = $ReadPost->getResult()[0];
            if (file_exists('../uploads/fabricantes/' . $FabDelete['fabricante_img']) && !is_dir('../uploads/fabricantes/' . $FabDelete['fabricante_img'])):
                unlink('../uploads/fabricantes/' . $FabDelete['fabricante_img']);
            endif;

            $deleta = new Delete;            
            $deleta->ExeDelete(self::Entidy, "WHERE fabricante_id = :fabricanteid", "fabricanteid={$this->FabId}");

            $this->Error = ["O fabricante <b>{$FabDelete['fabricante_titulo']}</b> foi removido do sistema!", WS_ACCEPT];
        endif;
    }

    public function ExeStatus($FabId, $FabStatus) {
        $this->FabId = (int) $FabId;
        $this->Data['fabricante_status'] = (string) $FabStatus;

        $Update = new Update;
        $Update->ExeUpdate(self::Entidy, $this->Data, "WHERE fabricante_id = :id", "id={$this->FabId}");
    }

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

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

    //PRIVATE
    private function setData() {
        $Cover = $this->Data['fabricante_img'];
        unset($this->Data['fabricante_img']);

        $this->Data = array_map('strip_tags', $this->Data);
        $this->Data = array_map('trim', $this->Data);

        $this->Data['fabricante_nome'] = Check::Name($this->Data['fabricante_titulo']);
        $this->Data['fabricante_data'] = date("Y-m-d H:i:s");
        $this->Data['fabricante_status'] = 1;
        $this->Data['fabricante_img'] = $Cover;
        //$this->Data['fabricante_descricao'] = $Content;
    }

    private function setName() {
        $where = (isset($this->FabId) ? "fabricante_id != {$this->FabId} AND" : '');

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

    private function Create() {
        $cadastra = new Create;
        $cadastra->ExeCreate(self::Entidy, $this->Data);
        if ($cadastra->getResult()):
            $this->Error = ["O fabricante <b>{$this->Data['fabricante_title']}</b> foi cadastrado com sucesso no sistema!", WS_ACCEPT];
            $this->Result = $cadastra->getResult();
        endif;
    }

    private function Update() {
        $Update = new Update;
        $Update->ExeUpdate(self::Entidy, $this->Data, "WHERE fabricante_id = :id", "id={$this->FabId}");
        if ($Update->getResult()):
            $this->Error = ["O fabricante <b>{$this->Data['fabricante_titulo']}</b> foi atualizado com sucesso no sistema!", WS_ACCEPT];
            $this->Result = true;
        endif;
    }

}
