<?php declare(strict_types=1);
/*
 * Copyright (C) 2015-2017 IRSTEA
 * All rights reserved.
 */

namespace Irstea\FileUploadBundle\Controller;

use Irstea\FileUploadBundle\Entity\UploadedFile;
use Pagerfanta\Adapter\DoctrineORMAdapter;
use Pagerfanta\Pagerfanta;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

/**
 * UploadedFile controller.
 * @Route("/files")
 * @Security("is_granted('ROLE_FILES_ADMIN')")
 */
class UploadedFileController extends Controller
{
    /**
     * Lists all UploadedFile entities.
     * @Route("/", name="files")
     * @Method("GET")
     * @Template()
     */
    public function indexAction(Request $request)
    {
        $em = $this->getDoctrine()->getManager();

        $queryBuilder = $em->getRepository('IrsteaFileUploadBundle:UploadedFile')
            ->createQueryBuilder('u')
            ->orderBy('u.createdAt', 'DESC');

        $pager = new Pagerfanta(new DoctrineORMAdapter($queryBuilder));
        $pager->setCurrentPage($request->query->get('page', 1));

        $uploadedFiles = $pager->getCurrentPageResults();

        return [
            'uploadedFiles' => $uploadedFiles,
            'pager'         => $pager,
        ];
    }

    /**
     * Finds and displays a UploadedFile entity.
     * @Route("/{id}", name="files_show")
     * @Method("GET")
     * @Template()
     */
    public function showAction(UploadedFile $uploadedFile)
    {
        return [
            'uploadedFile' => $uploadedFile,
        ];
    }

    /**
     * @param string $message
     * @param array  $parameters
     */
    public function notice($message, array $parameters = [])
    {
        $this->get('monolog.logger.irstea_logger')->notice($message, $parameters);
    }
}