<?php

/**
 * AdminCredito [MODEL]
 * Class responsável controlar as transações de pedidos e créditos
 * @copyright (c) 2017, Welton Thierree TagPage
 */
class AdminCredito {

    private $Ref;
    private $Status;
    private $Data;
    private $Mensagem;
    private $CredId;
    private $SubId;
    private $DataIni;
    private $DataFim;
    private $Result;
    private $Error;

    public function ExeTransaction($Ref, $Status) {
        $this->Ref = (int) $Ref;
        $this->Status = (int) $Status;

        $this->upPedido();
        $this->getPedido();
        $this->setMensagem();
        $this->SendEmail();

        if ($this->Status == 3):
            $this->setCredito();
            $this->endPedido();
        endif;
    }

    public function ExeAtivar($CredId, $SubId) {
        $this->CredId = (int) $CredId;
        $this->SubId = (int) $SubId;

        if ($this->SubId == null):
            $this->Result = false;
            $this->Error = ['Alerta! Por favor selecione uma categoria e subcategoria para ativar o crédito.', WS_ALERT];
        else:
            $this->setPeriodoCredito();
            $this->ativarCredito();
        endif;
    }

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

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

    //PRIVATE
    private function upPedido() {
        $this->Data['pedido_status'] = $this->Status;
        $Update = new Update;
        $Update->ExeUpdate("tp_pedido", $this->Data, "WHERE pedido_id = :ref", "ref={$this->Ref}");
    }

    private function getPedido() {
        $Read = new Read;
        $Read->FullRead("SELECT p.pedido_id, p.pedido_status, p.pedido_data, u.usuario_id, u.usuario_nome, u.usuario_fantasia, u.usuario_email, u.usuario_tipo FROM tp_pedido p JOIN tp_usuarios u ON u.usuario_id = p.usuario_id WHERE p.pedido_id = :ref", "ref={$this->Ref}");
        $this->Data = $Read->getResult()[0];
        
        $Read->FullRead("SELECT pp.pedido_produto_id, pp.produto_id, pp.produto_nome, pp.produto_dias, pp.pedido_produto_quantidade, p.produto_categoria FROM tp_pedido_produto pp JOIN tp_produto p ON pp.produto_id = p.produto_id WHERE pp.pedido_id = :ref", "ref={$this->Ref}");
        //$Read->ExeRead("tp_pedido_produto", "WHERE pedido_id = :ref", "ref={$this->Ref}");
        $this->Data['produtos'] = $Read->getResult();
    }

    private function setMensagem() {
        switch ($this->Status) {
            case 1:
                $this->Mensagem = "<img src=\"http://www.inexnet.com.br/themes/inexnet/img/logo.png\" align=\"center\"><hr><h3>Olá, {$this->Data['usuario_nome']},</h3> <br> O status do seu pedido de compra de créditos da INEXnet foi alterado.<br><br>Número do Pedido: {$this->Data['pedido_id']}<br><br>Novo Status: Aguardando pagamento<br><br><br>Atenciosamente,<br><br>Equipe INEXnet<br><br><i><small>Não é necessário responder a esse e-mail.</small></i>";
                break;

            case 2:
                $this->Mensagem = "<img src=\"http://www.inexnet.com.br/themes/inexnet/img/logo.png\" align=\"center\"><hr><h3>Olá, {$this->Data['usuario_nome']},</h3> <br> O status do seu pedido de compra de créditos da INEXnet foi alterado.<br><br>Número do Pedido: {$this->Data['pedido_id']}<br><br>Novo Status: Em análise<br><br><br>Atenciosamente,<br><br>Equipe INEXnet<br><br><i><small>Não é necessário responder a esse e-mail.</small></i>";
                break;

            case 3:
                $this->Mensagem = "<img src=\"http://www.inexnet.com.br/themes/inexnet/img/logo.png\" align=\"center\"><hr><h3>Olá, {$this->Data['usuario_nome']},</h3> <br> O seu pedido de compra de créditos da INEXnet foi concluído.<br><br>Número do Pedido:{$this->Data['pedido_id']}<br><br>Não deixe de realizar a ativação do crédito na Categoria e Subcategoria desejada.<br><br>Boas vendas!!!<br><br><br>Atenciosamente,<br><br>Equipe INEXnet<br><br><i><small>Não é necessário responder a esse e-mail.</small></i>";
                break;

            case 4:
                $this->Mensagem = "<img src=\"http://www.inexnet.com.br/themes/inexnet/img/logo.png\" align=\"center\"><hr><h3>Olá, {$this->Data['usuario_nome']},</h3> <br> O status do seu pedido de compra de créditos da INEXnet foi alterado.<br><br>Número do Pedido: {$this->Data['pedido_id']}<br><br>Novo Status: Disponível<br><br><br>Atenciosamente,<br><br>Equipe INEXnet<br><br><i><small>Não é necessário responder a esse e-mail.</small></i>";
                break;

            case 5:
                $this->Mensagem = "<img src=\"http://www.inexnet.com.br/themes/inexnet/img/logo.png\" align=\"center\"><hr><h3>Olá, {$this->Data['usuario_nome']},</h3> <br> O status do seu pedido de compra de créditos da INEXnet foi alterado.<br><br>Número do Pedido: {$this->Data['pedido_id']}<br><br>Novo Status: Em disputa<br><br><br>Atenciosamente,<br><br>Equipe INEXnet<br><br><i><small>Não é necessário responder a esse e-mail.</small></i>";
                break;

            case 6:
                $this->Mensagem = "<img src=\"http://www.inexnet.com.br/themes/inexnet/img/logo.png\" align=\"center\"><hr><h3>Olá, {$this->Data['usuario_nome']},</h3> <br> O status do seu pedido de compra de créditos da INEXnet foi alterado.<br><br>Número do Pedido: {$this->Data['pedido_id']}<br><br>Novo Status: Devolvida<br><br><br>Atenciosamente,<br><br>Equipe INEXnet<br><br><i><small>Não é necessário responder a esse e-mail.</small></i>";
                break;

            case 7:
                $this->Mensagem = "<img src=\"http://www.inexnet.com.br/themes/inexnet/img/logo.png\" align=\"center\"><hr><h3>Olá, {$this->Data['usuario_nome']},</h3> <br> O status do seu pedido de compra de créditos do INEXnet foi alterado.<br><br>Número do Pedido: {$this->Data['pedido_id']}<br><br>Novo Status: Cancelada<br><br><br>Atenciosamente,<br><br>Equipe INEXnet<br><br><i><small>Não é necessário responder a esse e-mail.</small></i>";
                break;

            default:
                break;
        }
    }

    private function SendEmail() {
        //montando os dados para o envio do email
        $Dados['Assunto'] = 'Pedido de compra da INEXnet';
        $Dados['DestinoNome'] = $this->Data['usuario_nome'];
        $Dados['DestinoEmail'] = $this->Data['usuario_email'];
        $Dados['RemetenteNome'] = 'Equipe INEXnet';
        $Dados['RemetenteEmail'] = 'contato@inexnet.com.br';
        $Dados['Mensagem'] = $this->Mensagem;

        $Send = new Email;
        $Send->Enviar($Dados);
    }

    private function setCredito() {

        foreach ($this->Data['produtos'] as $produto):
            extract($produto);
            for ($i = 0; $i < $pedido_produto_quantidade; $i++):

                for ($y = 0; $y < $produto_categoria; $y++):
                    $Dados['usuario_id'] = $this->Data['usuario_id'];
                    $Dados['credito_dias'] = $produto_dias;
                    $Dados['credito_data'] = date('Y-m-d H:i:s');
                    $Create = new Create;
                    $Create->ExeCreate("tp_creditos", $Dados);
                endfor;
            endfor;

        endforeach;
    }

    private function endPedido() {
        $this->Data = NULL;
        $this->Data['pedido_ativado'] = 1;
        $this->Data['pedido_data_ativado'] = date('Y-m-d H:i:s');
        $Update = new Update;
        $Update->ExeUpdate("tp_pedido", $this->Data, "WHERE pedido_id = :ref", "ref={$this->Ref}");
    }

    private function setPeriodoCredito() {
        $read = new Read;
        $read->ExeRead("tp_creditos", "WHERE credito_id = :id", "id={$this->CredId}");
        if ($read->getResult()):
            $dias = $read->getResult()[0]['credito_dias'];

            $meses = $dias / 30;
            $data = mktime(date("H"), date("i"), date("s"), date("m") + $meses, date("d"), date("Y"));
            $this->DataFim = date("Y-m-d H:i:s", $data);
            $this->DataIni = date("Y-m-d H:i:s");
        endif;
    }

    private function ativarCredito() {
        $Dados['subcategoria_id'] = $this->SubId;
        $Dados['credito_data_ini'] = $this->DataIni;
        $Dados['credito_data_fim'] = $this->DataFim;
        $Dados['credito_status'] = 0;

        $Update = new Update;
        $Update->ExeUpdate("tp_creditos", $Dados, "WHERE credito_id = :id", "id={$this->CredId}");
        if ($Update->getResult()):
            $this->Result = TRUE;
            $this->Error = ["Sucesso crédito ativado com sucesso", WS_ACCEPT];
        else:
            $this->Result = FALSE;
            $this->Error = ["Erro não foi possivel ativar o crédito", WS_ERROR];
        endif;
    }

}
