<?php

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

    private $Data;
    private $Empresa;
    private $Error;
    private $Result;

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

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

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

            if ($this->getResult()):
                $this->Create();
            endif;
        endif;
    }

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

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

            if ($this->getResult()):
                $this->Update();
            endif;
        endif;
    }

    public function ExeDelete($EmpresaId) {
        $this->Empresa = (int) $EmpresaId;
        $ReadEmpresa = new Read;
        $ReadEmpresa->ExeRead(self::Entidy, "WHERE empresa_id = :id", "id={$this->Empresa}");

        if (!$ReadEmpresa->getResult()):
            $this->Error = ["A empresa que você tentou deletar não existe no sistema!", WS_ERROR];
            $this->Result = false;
        else:
            $EmpresaDelete = $ReadEmpresa->getResult()[0];
            if (file_exists('../uploads/' . $EmpresaDelete['empresa_capa']) && !is_dir('../uploads/' . $EmpresaDelete['empresa_capa'])):
                unlink('../uploads/' . $EmpresaDelete['empresa_capa']);
            endif;

            $deleta = new Delete;
            $deleta->ExeDelete(self::Entidy, "WHERE empresa_id = :empresaid", "empresaid={$this->Empresa}");

            $this->Error = ["A Empresa <b>{$EmpresaDelete['empresa_title']}</b> foi removida do sistema!", WS_ACCEPT];
        endif;
    }

    public function ExeStatus($EmpresaId, $EmpresaStatus) {
        $this->Empresa = (int) $EmpresaId;
        $this->Data['Empresa_status'] = (string) $EmpresaStatus;

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

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

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

    //PRIVATE
    //Validar e criar os dados para realizar o cadastro.
    private function setData() {
        $this->Data['empresa_name'] = Check::Name($this->Data['empresa_title']);
        $this->Data['empresa_date'] = date('Y-m-d H:i:s');
    }

    //Verificar e envia a capa da empresa para a pasta!
    private function setName() {
        $where = (isset($this->Empresa) ? "empresa_id != {$this->Empresa} AND" : '');

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

    //Verificar e enviar a capa da empresa para a pasta
    private function setCapa() {
        if (!empty($this->Data['empresa_capa']['tmp_name'])):
            list($w, $h) = getimagesize($this->Data['empresa_capa']['tmp_name']);

            if ($w != '578' || $h != '288'):
                $this->Error = ['Capa Inválida: A Capa da empresa deve ter exatamente 578x288px do tipo .JPG, .PNG ou .GIF!', WS_INFOR];
                $this->Result = false;
            else:
                $this->checkCover();
                $Upload = new Upload;
                $Upload->Image($this->Data['empresa_capa'], $this->Data['empresa_name'], 578, 'empresas');

                if ($Upload->getError()):
                    $this->Error = $Upload->getError();
                    $this->Result = false;
                else:
                    $this->Data['empresa_capa'] = $Upload->getResult();
                    $this->Result = true;
                endif;
            endif;
        endif;
    }

    // Verifica se já existe uma capa, se sim deleta para enviar outra!
    private function checkCover() {
        $readCapa = new Read;
        $readCapa->FullRead("SELECT empresa_capa FROM app_empresas WHERE empresa_id = :id", "id={$this->Empresa}");

        if ($readCapa->getRowCount()):
            $delCapa = $readCapa->getResult()[0]['empresa_capa'];
            if (file_exists("../uploads/{$delCapa}") && !is_dir("../uploads/{$delCapa}")):
                unlink("../uploads/{$delCapa}");
            endif;
        endif;
    }

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

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

}
