<?php
/**
 * Created by PhpStorm.
 * User: c.grivault
 * Date: 24/10/2022
 * Time: 11:20
 */

namespace App\Controller\Api;

use App\Entity\Produit;
use App\Entity\Utilisateur;
use App\Entity\Installateur;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Symfony\Component\Serializer\Serializer;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\Request;
use App\Entity\Post;
use App\Utils\Functions;
use Symfony\Component\HttpFoundation\JsonResponse;



/**
 * Class ApiProduitController
 *
 * @Route("/api/produit")
 */
class ApiProduitController extends AbstractController
{

    /**
     * Liste des pièces
     * @Route("/pieces/{token_mobilite}", methods="GET", name="pieces")
     * @Entity("utilisateur", expr="repository.findOneBy({'token_mobilite': token_mobilite})")
     */
    public function piecesAction(?Utilisateur $utilisateur, SerializerInterface $serializer)
    {
        if (!$utilisateur) {
            throw $this->createNotFoundException('Utilisateur non trouvé');
        }
        $em = $this->getDoctrine()->getManager();
        $pieces = $em->getRepository(Produit::class)->getPiecesTablette($utilisateur->getAgence()->getSite());
        $datasPieces = Functions::getSerialisedEntities($pieces, $serializer, 'api');
        return new JsonResponse(["pieces" => $datasPieces, true], 201);
    }

    /**
     * Liste des consommables
     * @Route("/consommables/{token_mobilite}", methods="GET", name="consommables")
     * @Entity("utilisateur", expr="repository.findOneBy({'token_mobilite': token_mobilite})")
     */
    public function consommablesAction(?Utilisateur $utilisateur, SerializerInterface $serializer)
    {
        if (!$utilisateur) {
            throw $this->createNotFoundException('Utilisateur non trouvé');
        }
        $em = $this->getDoctrine()->getManager();
        $consommables = $em->getRepository(Produit::class)->getConsommablesTablette($utilisateur->getAgence()->getSite());
        $datasConsommables = Functions::getSerialisedEntities($consommables, $serializer, 'api');
        return new JsonResponse(["consommables" => $datasConsommables], 201);
    }

}