<?php

namespace Utils\System\Database\Enum;

use Eloquent\Enumeration\AbstractEnumeration;

/**
 * Class TipoNotaEnum.
 *
 * @method DEVOLUCAO()
 * @method VENDA()
 * @method COMPRA()
 * @method DEVOLUCAO_COMPRA()
 *
 * @author Gabriel Anhaia <gabriel@sadglobal.com.br>
 *
 * @package Utils\System\Database\Enum
 */
class TipoNotaEnum extends AbstractEnumeration
{
    /** @var string DEVOLUCAO Status de devolução da nota fiscal. */
    const DEVOLUCAO = 'devolucao';

    /** @var string VENDA Status de nota fiscal de venda. */
    const VENDA = 'venda';

    /** @var string COMPRA Status de nota fiscal de compra. */
    const COMPRA = 'compra';

    /** @var string DEVOLUCAO_COMPRA Status de nota fiscal de devoluçao de compra. */
    const DEVOLUCAO_COMPRA = 'devolucao_compra';

    protected $descriptionMap = [
        self::DEVOLUCAO => 'Devolução',
        self::VENDA => 'Venda',
        self::COMPRA => 'Compra',
        self::DEVOLUCAO_COMPRA => 'Devolução Compra'
    ];

    /**
     * Método responsável por retornar a descrição dos tipos.
     *
     * @return string
     */
    public function getDescription()
    {
        switch ($this->value()) {
            case self::COMPRA:
                return 'Compra';
            case self::VENDA:
                return 'Venda';
            case self::DEVOLUCAO:
                return 'Devolucao';
            case self::DEVOLUCAO_COMPRA:
                return 'Devolução compra';
            default:
                return 'Indefinido';
        }
    }

    /**
     * Monta e retorna um array de options com as constantes do enum.
     *
     * @return array
     */
    public static function mountOption()
    {
        $return = [];

        foreach (self::members() as $type) {
            $return[$type->value()] = $type->getDescription();
        }

        return $return;
    }
}