<?php

namespace App\Controller;

use App\Entity\Commune;
use App\Entity\Desagregation;
use App\Entity\Indicator;
use App\Entity\User;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\Request;
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;

class ExportController extends AbstractController
{   
    public function __construct(){
    }

    /**
     * @Route("/app/loadusers", name="app_loadusers")
     */
    //@IsGranted({"ROLE_ADMIN"})
    public function loadusers(Request $request, UserPasswordEncoderInterface $passwordEncoder)
    {
        $users = $this->getDoctrine()->getRepository(User::class)->findAll();
        foreach ($users as $user) {
            $user->setPassword(
                $passwordEncoder->encodePassword(
                    $user,
                    'SigOdd@2o3o'
                )
            );
            $this->getDoctrine()->getManager()->persist($user);
        }

            
        $communes = $this->getDoctrine()->getRepository(Commune::class)->findAll();
        foreach ($communes as $commune) {
            $communename= str_replace(
                array('é', 'è', 'ê', 'ë', 'à', 'â', 'î', 'ï', 'ô', 'ù', 'û'),
                array('e', 'e', 'e', 'e', 'e', 'e', 'i', 'i', 'o', 'u', 'u'),
                $commune->getName()
             );
            $user = new User();
            $user->setCommune($commune);
            $user->setEmail('pf.'.strtolower($communename).'@gouv.bj');
            $user->setFamilyName($commune->getName());
            $user->setGivenName('PF');
            $user->setOffice('Point Focal');
            $user->addRole("ROLE_FOCAL");
            $user->setPassword(
                $passwordEncoder->encodePassword(
                    $user,
                    'SigOdd@2o3o'
                )
            );
            $this->getDoctrine()->getManager()->persist($user);

            $user = new User();
            $user->setCommune($commune);
            $user->setEmail('se.'.strtolower($communename).'@gouv.bj');
            $user->setFamilyName($commune->getName());
            $user->setGivenName('SE');
            $user->setOffice('Secrétaire Exécutif');
            $user->addRole("ROLE_DPP");
            $user->setPassword(
                $passwordEncoder->encodePassword(
                    $user,
                    'SigOdd@2o3o'
                )
            );
            $this->getDoctrine()->getManager()->persist($user);
        }
        $this->getDoctrine()->getManager()->flush();
        dd("Fin");
    }
    
    /**
     * @Route("/app/app_opendata", name="app_opendata")
     */
    //@IsGranted({"ROLE_MANGER"})
    public function opendata(Request $request)
    {
        return $this->render('export/opendata.html.twig', [
        ]);
    }

    /**
     * @Route("/app/app_opendata_post", name="app_opendata_post")
     */
    //@IsGranted({"ROLE_MANGER"})
    public function opendatapost(Request $request)
    {
        $annee = $request->getSession()->get('_year');
        $fileName = 'SIGODD-OpenData' . $annee . '.xlsx';
        $maquette = $this->getParameter('kernel.project_dir') . '/public/upload/export/opendata.xlsx';
        $indicateurs = $this->getDoctrine()->getRepository(Indicator::class)->findAll();
        if (count($indicateurs) > 0) {
            //Chargement de la maquette de base
            $spreadsheet = IOFactory::load($maquette);

            //Création des feuilles par indicateur
            $spreadsheet->getActiveSheet()->setTitle("Indicateur " . $indicateurs[0]->getCode());
            $nombreIndicateurs = count($indicateurs);
            for ($i = 1; $i < $nombreIndicateurs; $i++) {
                $clonedWorksheet = clone $spreadsheet->getSheet(0);
                $clonedWorksheet->setTitle("Indicateur_" . $indicateurs[$i]->getCode());
                $spreadsheet->addSheet($clonedWorksheet);
            }

            //Remplissage de chaque feuille
            for ($i = 0; $i < $nombreIndicateurs; $i++) {
                $indicateur = $indicateurs[$i];
                $sheet = $spreadsheet->getSheet($i);
                /*$desagregations=$$indicateur->getDesagregations();
                foreach ($desagregations as $d) {
                    $desagregation = $this->getDoctrine()->getRepository(Desagregation::class)->findOneBy(['id' => $d]);
                }*/
               
            }

            //Retour sur la feuille accueil
            $sheet = $spreadsheet->setActiveSheetIndex(0);

            //Télécharchement du fichier
            $writer = new Xlsx($spreadsheet);
            $response =  new StreamedResponse(
                function () use ($writer) {
                    $writer->save('php://output');
                }
            );
            $response->headers->set('Content-Type', 'application/vnd.ms-excel');
            $response->headers->set('Content-Disposition', 'attachment;filename="' . $fileName . '"');
            $response->headers->set('Cache-Control', 'max-age=0');
            return $response;
        }
    }

    /**
     * @Route("/app/app_mrs", name="app_mrs")
     */
    //@IsGranted({"ROLE_MANGER"})
    public function mrs(Request $request)
    {
        return $this->render('export/mrs.html.twig', [
        ]);
    }

    /**
     * @Route("/app/app_iprt", name="app_iprt")
     */
    //@IsGranted({"ROLE_MANGER"})
    public function iprt(Request $request)
    {
        return $this->render('export/iprt.html.twig', [
        ]);
    }
    
    
}
