<?php

namespace App\Flexy\FrontBundle\Themes\Taxiciel\Controller\Front;

use App\Flexy\FrontBundle\Entity\Page;
use App\Flexy\FrontBundle\Entity\PubBanner;
use App\Flexy\FrontBundle\Themes\Taxiciel\Form\Mission\MissionType;
use App\Flexy\FrontBundle\Themes\Taxiciel\Form\Order\OrderItemType;
use App\Flexy\FrontBundle\Themes\Taxiciel\Form\Order\OrderStepInfosType;
use App\Flexy\FrontBundle\Themes\Taxiciel\Form\Order\OrderType;
use App\Flexy\FrontBundle\Repository\CategoryProductFrontRepository;
use App\Flexy\FrontBundle\Repository\MasterSliderRepository;
use App\Flexy\FrontBundle\Repository\PubBannerRepository;
use App\Flexy\ShopBundle\Repository\Product\ProductRepository;
use App\Flexy\FrontBundle\Repository\ProductFrontRepository;
use App\Flexy\ShopBundle\Entity\Customer\CustomerGroup;
use App\Flexy\ShopBundle\Entity\Order\Order;
use App\Flexy\ShopBundle\Entity\Order\OrderItem;
use App\Flexy\ShopBundle\Entity\Shipping\CityRegion;
use App\Flexy\ShopBundle\Entity\Shipping\ShipmentItem;
use App\Flexy\ShopBundle\Entity\Shipping\ShippingMethod;
use App\Flexy\ShopBundle\Entity\Shipping\ShippingRule;
use App\Flexy\TransportBundle\Entity\Mission;
use App\Repository\Flexy\ShopBundle\Entity\Customer\PackRepository;
use Doctrine\Persistence\ManagerRegistry;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Mercure\HubInterface;
use Symfony\Component\Mercure\Update;
use Stripe;


class HomeController extends AbstractController
{
    #[Route('/', name: 'front_home')]
    public function index(
        ProductFrontRepository $productRepository,
        MasterSliderRepository $masterSliderRepository,
        PubBannerRepository $pubBannerRepository,
        CategoryProductFrontRepository $categoryProductFrontRepository,
        PackRepository $packRepository
        
        ): Response
    {


        $deals = $productRepository->findDeals();



        //dd($this->container->get('twig')->getGlobals()["settings"]->get()->getAssetFolderName());
        

        

        return $this->render('@Flexy/FrontBundle/Themes/Taxiciel/templates/front/home/index.html.twig', [
            'products' => $productRepository->findBy(["isPublished"=>true],["id"=>"ASC"],12),
            'packs' => $packRepository->findAll(),
            'masterSliders'=> $masterSliderRepository->findBy(["isEnabled"=>true]),
            'pubBanners'=> $pubBannerRepository->findBy(["isEnabled"=>true]),
            'deals'=>$deals,
            'categoriesProduct'=> $categoryProductFrontRepository->findBy(["parentCategory"=>null])
        ]);
    }



    #[Route('/contact', name: 'contact')]
    public function contact(ProductRepository $productRepository): Response
    {
        return $this->render('@Flexy/FrontBundle/Themes/Taxiciel/templates/front/home/contact.html.twig', [
            'products' => $productRepository->findAll(),
        ]);
    }



    #[Route('/banner-block/{id}', name: 'pubBannerBlock')]
    public function pubBannerBlock(PubBanner $pubBanner): Response
    {
        return $this->render('@Flexy/FrontBundle/Themes/Taxiciel/templates/front/templates/include-pubs/_singlePubBanner.html.twig', [
            'singleBanner' => $pubBanner,
        ]);
    }


    

    #[Route('/mercure-send', name: 'pubBannerBlock')]
    public function publish(HubInterface $hub): Response
    {
        $update = new Update(
            'https://hello.com/books/1',
            json_encode(
                [
                    'status' => 'success',
                    'entity'=>'Order',
                    'data'=>[],
                ]
                )
        );

        $hub->publish($update);

        return new Response('published!');
    }

    #[Route('/front_slider/{id}', name: 'front_slider')]
    public function front_slider($id=null): Response
    {
        return $this->render('@Flexy/FrontBundle/Themes/Taxiciel/templates/front/templates/include-pubs/singleMasterSlider.html.twig', [
            'id' => $id,
        ]);
    }




    #[Route('/sitemap.xml', name: 'sitemap', defaults:["_format"=>"xml"])]
    public function sitemap(Request $request,ManagerRegistry $doctrine): Response
    {

        $hostname = $request->getSchemeAndHttpHost();

        $urls = [];

            // On ajoute les URLs "statiques"
            $urls[] = ['loc' => $this->generateUrl('front_home')];
            $urls[] = ['loc' => $this->generateUrl('login_register')];
            //$urls[] = ['loc' => $this->generateUrl('app_login')];

            // On ajoute les URLs dynamiques des articles dans le tableau
            foreach ($doctrine->getManager()->getRepository(Page::class)->findAll() as $page) {
                /*
                $images = [
                    'loc' => '/uploads/images/featured/'.$page->getFeaturedImage(), // URL to image
                    'title' => $page->getName()    // Optional, text describing the image
                ];
                */

                $urls[] = [
                    'loc' => $this->generateUrl('single_page', [
                        'slug' => $page->getSlug(),
                    ]),
                    //'lastmod' => $page->getUpdatedAt()->format('Y-m-d'),
                    //'image' => $images
                ];
            }

            // Fabrication de la réponse XML
            $response = new Response(
                $this->renderView('@Flexy/FrontBundle/Themes/Taxiciel/templates/front/home/sitemap.html.twig', [
                    'urls' => $urls,
                    'hostname' => $hostname
                ]),
                200
            );

            // Ajout des entêtes
            $response->headers->set('Content-Type', 'text/xml');

            // On envoie la réponse
            return $response;

       
    }




    
}
