<?php
/**
 * Arquivo de declaração da classe Paginacao.
 */
class Paginacao
{
    public $inicio;
    public $qtdPerPage;
    public $totalPaginas;
    public $total;
    public $pagina;
    public $links;

    public function __construct($qtdPerPage = 0, $total = 0, $links = '')
    {
        $this->qtdPerPage = $qtdPerPage;
        $this->total = $total;
        $this->links = $links;
    }

    public function getQtdPerPage()
    {
        return $this->qtdPerPage;
    }

    public function getOffset()
    {
        $offset = (0 != $this->pagina) ? ($this->pagina - 1) * $this->qtdPerPage : 0;

        return $offset;
    }

    public function paginar($pagina = 1)
    {
        $this->pagina = $pagina;

        if (!$this->pagina) {
            $this->inicio = 0;
            $this->pagina = 1;
        } else {
            $this->inicio = ($this->pagina - 1) * $this->qtdPerPage;
        }

        $this->totalPaginas = ceil($this->total / $this->qtdPerPage);
    }

    public function links()
    {
        $add = 0;
        $sub = 0;
        $retorno = '';
        $reg = 0;

        // mostro os diferentes índices das páginas, se existir várias páginas
        if ($this->totalPaginas > 1) {
            $retorno = "<ul id='paginacao' class='clearfix'>";

            if ($this->pagina > 1) {
                $linkAnterior = 'href="index.php?i=' . $this->links . '&pagina=' . ($this->pagina - 1) . '"';
                $classAnterior = '';
            } else {
                $linkAnterior = '';
                $classAnterior = 'class="disabled"';
            }

            $retorno .= '<li class="anterior">';
            $retorno .= '<a ' . $classAnterior . ' ' . $linkAnterior . ' title="Página anterior">PÁGINA <strong>ANTERIOR</strong></a>';
            $retorno .= '</li>';

            $retorno .= '<div class="paginas">';
            $retorno .= '<ul>';

            /* Numero das páginas*/
            for ($i = 1; $i <= $this->totalPaginas; ++$i) {
                $sub = 0; // utilizado para manter sempre 10 elementos caso exista

                // PÁGINAS A ESQUERDA
                if ($i >= $this->totalPaginas - 10) {
                    $sub = $i;
                }

                if ($this->pagina == $i) {
                    // se mostro o índice da página atual, não coloco link
                    $retorno .= "<li><a class='active' href='javascript:;'>" . $this->pagina . '</a></li>';

                    // utilizado para manter sempre 10 elementos caso exista
                    $add = 0;

                    // PÁGINAS A DIREITA
                    if ($i <= 5) {
                        $add = 5 - $i;
                    }
                } elseif ($i >= $this->pagina - 5 - $sub + 1 && $i < $this->pagina + 6 + $add) {
                    // se o ándice não corresponde com a p�gina mostrada atualmente, coloco o link para ir a essa página
                    $retorno .= "<li><a href='index.php?i=" . $this->links . '&pagina=' . $i . "' >" . $i . '</a></li>';
                }
            }

            $retorno .= '</ul>';
            $retorno .= '</div>';

            if ($this->pagina < $this->totalPaginas) {
                $linkProximo = 'href="index.php?i=' . $this->links . '&pagina=' . ($this->pagina + 1) . '"';
                $classProximo = '';
            } else {
                $linkProximo = '';
                $classProximo = 'class="disabled"';
            }

            $retorno .= '<li class="proxima">';
            $retorno .= '<a ' . $classProximo . ' ' . $linkProximo . ' title="Página anterior"><strong>PRÓXIMA</strong> PÁGINA</a>';
            $retorno .= '</li>';

            $retorno .= '</ul>';
        }

        return $retorno;
    }

    public function linkNoticias()
    {
        $add = 0;
        $sub = 0;
        $retorno = '';
        $reg = 0;

        // mostro os diferentes índices das páginas, se que há várias páginas
        if ($this->totalPaginas > 1) {
            $retorno = '<ul id="paginacao" class="pagination">';

            $retorno .= '<li><a href="' . $this->links . '/' . ($this->pagina - 1) . '"><span aria-hidden="true"></span><span class="sr-only">Previous</span></a></li>';

            /* Numero das páginas*/
            for ($i = 1; $i <= $this->totalPaginas; ++$i) {
                // utilizado para manter sempre 10 elementos caso exista
                $sub = 0;

                if ($i >= $this->totalPaginas - 10) {   // PÁGINAS A ESQUERDA
                    $sub = $i;
                }

                // -----------------------------------------------------
                if ($this->pagina == $i) {
                    // se mostro o índice da página atual, não coloco link
                    $retorno .= '<li class="active"><a href="javascript:;"">' . $this->pagina . '</a></li>';
                    // utilizado para manter sempre 10 elementos caso exista
                    $add = 0;
                    if ($i <= 5) {      // PáGINAS A DIREITA
                        $add = 5 - $i;
                    }
                } elseif ($i >= $this->pagina - 5 - $sub && $i < $this->pagina + 6 + $add) {
                    // se o ándice não corresponde com a p�gina mostrada atualmente, coloco o link para ir a essa página
                    $retorno .= '<li><a href="' . $this->links . '/' . $i . '">' . $i . '</a></li>';
                }
            }

            $retorno .= '<li><a href="' . $this->links . '/' . ($this->pagina + 1) . '\"><span aria-hidden="true"></span><span class="sr-only">Next</span></a></li>';

            $retorno .= '</ul>';
        }

        return $retorno;
    }
}
