<?php

namespace App\Controller\Api;

use App\Entity\Contrat;
use App\Entity\ContratPlage;
use App\Entity\ContratTarif;
use App\Entity\Equipement;
use App\Entity\Utilisateur;
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 Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;
use App\Entity\Post;
use App\Utils\Functions;
use Symfony\Component\HttpFoundation\JsonResponse;

/**
 * Class ApiContratController
 * @Route("/api/contrat")
 *
 */
class ApiContratController extends AbstractController
{
    /**
     * Liste des contrat avec prix selon un équipement
     * @Route("/tarifs/{id}/{token_mobilite}", methods="GET", name="tarifs")
     * @Entity("utilisateur", expr="repository.findOneBy({'token_mobilite': token_mobilite})")
     */
    public function tarifsAction( Equipement $equipement, ?Utilisateur $utilisateur, SerializerInterface $serializer)
    {
        if (!$utilisateur) {
            return new JsonResponse(['message' => 'Utilisateur non trouvé'], JsonResponse::HTTP_NOT_FOUND);
        }
        $em = $this->getDoctrine()->getManager();

        if($equipement->getEquipementTranche() == null){
            return new JsonResponse(['message' => "La tranche de l'équipement n'est pas renseigné"], 403);
        }
        $plage = $em->getRepository(ContratPlage::class)->findByAge($equipement->getEquipementTranche()->getAge());
        if($plage == null){
            return new JsonResponse(['message' => "L'âge de l'équipement ne permet pas d'avoir un contrat"], 403);
        }
        $tarifs = $em->getRepository(ContratTarif::class)->findForOneEquipement($equipement->getEquipementTypePuissance(),$plage);

        $datasTarifs = Functions::getSerialisedEntities($tarifs, $serializer, 'api');
        return new JsonResponse(["tarifs" => $datasTarifs], 201);

    }
}