<?php

namespace App\Controller;

use App\Entity\Mainstay;
use App\Entity\Accelerator;
use App\Entity\Costing;
use App\Form\MainstayType;
use App\Form\AcceleratorType;
use App\Form\CostingType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

class MainstayController extends AbstractController
{
    /**
     * @Route("/app/mainstays", name="app_mainstays")
     */
    public function mainstaysAction()
    {
        $mainstays = $this->getDoctrine()->getRepository(Mainstay::class)->findAll();

        return $this->render('mainstay/mainstay_list.html.twig', [
            'mainstays' => $mainstays,
        ]);
    }

    /**
     * @Route("/app/mainstays/new", name="app_mainstay_new")
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER"})
    public function newMainstayAction(Request $request)
    {
        $mainstay = new Mainstay();

        $form = $this->createForm(MainstayType::class, $mainstay);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $mainstay = $form->getData();

            $this->getDoctrine()->getManagerForClass(Mainstay::class)->persist($mainstay);
            $this->getDoctrine()->getManagerForClass(Mainstay::class)->flush();

            return $this->redirectToRoute('app_mainstays');
        }

        return $this->render('mainstay/mainstay_form.html.twig', [
            'mainstay' => $mainstay,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/mainstays/{id}", name="app_mainstay")
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER"})
    public function mainstayAction($id, Request $request)
    {
        $mainstay = $this->getDoctrine()
            ->getRepository(Mainstay::class)
            ->findOneBy(['id' => $id]);

        $form = $this->createForm(MainstayType::class, $mainstay);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $mainstay = $form->getData();

            $this->getDoctrine()->getManagerForClass(Mainstay::class)->flush();

            return $this->redirectToRoute('app_mainstays');
        }

        return $this->render('mainstay/mainstay_form.html.twig', [
            'mainstay' => $mainstay,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/accelerators", name="app_accelerators")
     */
    public function acceleratorsAction()
    {
        $accelerators = $this->getDoctrine()->getRepository(Accelerator::class)->findAll();

        return $this->render('mainstay/accelerator_list.html.twig', [
            'accelerators' => $accelerators,
        ]);
    }

    /**
     * @Route("/app/accelerators/new", name="app_accelerator_new")
     
     */
    // @IsGranted({"ROLE_ADMIN"})
    public function newAcceleratorAction(Request $request)
    {
        $accelerator = new Accelerator();

        $form = $this->createForm(AcceleratorType::class, $accelerator);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $accelerator = $form->getData();

            $this->getDoctrine()->getManagerForClass(Accelerator::class)->persist($accelerator);
            $this->getDoctrine()->getManagerForClass(Accelerator::class)->flush();

            return $this->redirectToRoute('app_accelerators');
        }

        return $this->render('mainstay/accelerator_form.html.twig', [
            'accelerator' => $accelerator,
            'form' => $form->createView(),
        ]);
    }


    /**
     * @Route("/app/accelerators/{id}", name="app_accelerator")
     
     */
    // @IsGranted({"ROLE_ADMIN"})
    public function acceleratorAction($id, Request $request)
    {
        $accelerator = $this->getDoctrine()
            ->getRepository(Accelerator::class)
            ->findOneBy(['id' => $id]);

        $form = $this->createForm(AcceleratorType::class, $accelerator, [
            'uploadkey' => 'A'.str_pad($accelerator->getId(), 5, "0", STR_PAD_LEFT),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $accelerator = $form->getData();

            $this->getDoctrine()->getManagerForClass(Accelerator::class)->flush();

            return $this->redirectToRoute('app_accelerators');
        }

        return $this->render('mainstay/accelerator_form.html.twig', [
            'accelerator' => $accelerator,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/costings", name="app_costings")
     */
    public function costingsAction(Request $request)
    {
        $costings = [];

        $costings = $this->getDoctrine()
            ->getRepository(Costing::class)
            ->findAll();

        return $this->render('mainstay/costing_list.html.twig', [
            'costings' => $costings,
            //'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/costings/new", name="app_costing_new")
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER", "ROLE_DPP", "ROLE_FOCAL"})
    public function newCostingAction(Request $request)
    {
        $costing = new Costing();

        $form = $this->createForm(CostingType::class, $costing, [
            //'sessionYear' => $request->getSession()->get('_year'),
            //'sessionMinistry' => $request->getSession()->get('_ministry'),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $costing = $form->getData();
            //$costing->setYear($request->getSession()->get('_year'));
            //$costing->setCreatedBy($this->getUser());
            //$costing->setValidatedBy($this->getUser());
            //$costing->setValidated(true);

            $this->getDoctrine()->getManagerForClass(Costing::class)->persist($costing);
            $this->getDoctrine()->getManagerForClass(Costing::class)->flush();

            return $this->redirectToRoute('app_costings');
        }

        return $this->render('mainstay/costing_form.html.twig', [
            'costing' => $costing,
            'form' => $form->createView(),
        ]);
    }

    /**
     * @Route("/app/costings/{id}", name="app_costing")
     
     */
    //* @IsGranted({"ROLE_ADMIN", "ROLE_MANAGER", "ROLE_DPP", "ROLE_FOCAL"})
    public function costingAction($id, Request $request)
    {
        $costing = $this->getDoctrine()
            ->getRepository(Costing::class)
            ->findOneBy(['id' => $id]);

        $form = $this->createForm(CostingType::class, $costing, [
            'uploadkey' => 'A'.str_pad($costing->getId(), 5, "0", STR_PAD_LEFT),
        ]);

        $form->handleRequest($request);
        if ($form->isSubmitted() && $form->isValid()) {
            $costing = $form->getData();
            //$costing->setUpdatedBy($this->getUser());

            $this->getDoctrine()->getManagerForClass(Costing::class)->flush();

            return $this->redirectToRoute('app_costings');
        }

        return $this->render('mainstay/costing_form.html.twig', [
            'costing' => $costing,
            'form' => $form->createView(),
        ]);
    }

}
