<?php
/**
 * Arquivo de declaração da classe LogCMSDAO.
 */
class LogCMSDAO
{
    private $conexao;

    /**
     * Método construtor.
     */
    public function __construct()
    {
        $this->conexao = Conexao::getInstancia();
    }

    /**
     * Método para inserir.
     *
     * @param  int $usuario
     * @param  string  $acao
     * @param  string  $ip
     */
    public function inserir($usuario = 0, $acao = '', $ip = '')
    {
        $txtSql = 'INSERT INTO cp_log (usuario_id, acao, ip) VALUES (:usuario, :acao, :ip)';

        try {
            $sql = $this->conexao->getConexao()->prepare($txtSql);
            $sql->bindParam(':usuario', $usuario, PDO::PARAM_INT);
            $sql->bindParam(':acao', $acao, PDO::PARAM_STR);
            $sql->bindParam(':ip', $ip, PDO::PARAM_STR);
            $sql->execute();
        } catch (PDOException $ex) {
            throw new BancoExcecao($ex->getMessage(), $txtSql, __FILE__, __CLASS__, __METHOD__, __LINE__);
        }

        $lastId = $sql->rowCount() > 0 ? (int) $this->conexao->getConexao()->lastInsertId() : null;
        $sql->closeCursor();

        return $lastId;
    }

    /**
     * Método para listar os objetos.
     *
     * @param  string $condicao
     * @param  array  $parametros
     * @param  string $order
     * @param  string $limit
     * @param  string $offset
     */
    public function listar($condicao = '', $parametros = array(), $order = '', $limit = '', $offset = '')
    {
        $condicao = Util::verificaCampo($condicao, 'AND');
        $order = Util::verificaCampo($order, 'ORDER BY');
        $limit = Util::verificaCampo($limit, 'LIMIT');
        $offset = Util::verificaCampo($offset, 'OFFSET');

        $txtSql = "SELECT
                        cp_usuarios.id as usu_id,
                        cp_usuarios.nome as usu_nome,
                        cp_log.acao as log_acao,
                        cp_log.criado_em as log_datacriacao
                    FROM cp_log
                    INNER JOIN cp_usuarios ON cp_usuarios.id = cp_log.usuario_id
                    WHERE cp_usuarios.excluido IS NULL $condicao $order $limit $offset";

        try {
            $sql = $this->conexao->getConexao()->prepare($txtSql);
            $this->conexao->setParametros($sql, $parametros);
            $sql->execute();
        } catch (PDOException $ex) {
            throw new BancoExcecao($ex->getMessage(), $txtSql, __FILE__, __CLASS__, __METHOD__, __LINE__);
        }

        $resultado = $sql->fetchAll(PDO::FETCH_ASSOC);
        $sql->closeCursor();

        if (!$resultado) {
            return null;
        }

        foreach ($resultado as $res) {
            $arrObjeto[] = array(
                'id' => $res['usu_id'],
                'nome' => $res['usu_nome'],
                'acao' => $res['log_acao'],
                'data' => $res['log_datacriacao'],
            );
        }

        return $arrObjeto;
    }
}
