<?php 
 
namespace App\Controller; 
 
use App\Entity\Category; 
use App\Entity\User; 
use App\Services\PdfGeneratorService; 
use http\Env\Request; 
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; 
use Symfony\Component\HttpFoundation\BinaryFileResponse; 
use Symfony\Component\HttpFoundation\File\File; 
use Symfony\Component\HttpFoundation\JsonResponse; 
use Symfony\Component\HttpFoundation\Response; 
use Symfony\Component\Routing\Annotation\Route; 
 
class PdfApiController extends AbstractController 
{ 
    /** 
     * @Route("/api", name="api") 
     */ 
    public function index(): Response 
    { 
       return new Response("test"); 
    } 
    /** 
     * @Route("/api/pdf/generate/{timestamp}/{token}", name="pdf_generate") 
     */ 
    public function generate(\Symfony\Component\HttpFoundation\Request $request,$timestamp,$token, PdfGeneratorService $pdf): Response 
    { 
       try { 
           if(!isset($_GET['payload'])) 
           { 
               return new JsonResponse(array( 
                   'success'=>false, 
                   'message'=>'Invalid Payload' 
               )); 
           } 
           $b64_payload = urldecode($_GET['payload']); 
           $payload = json_decode(base64_decode($_GET['payload']),true); 
           if(!$payload || !isset($payload['urls']) || empty($payload['urls'])) 
           { 
               return new JsonResponse(array( 
                   'success'=>false, 
                   'message'=>'Invalid Payload' 
               )); 
           } 
           $proceed_token = md5($b64_payload.$timestamp."@laoupdfgenerator765"); 
           $pdf->init('test'); 
           foreach($payload['urls'] as $url) 
                $pdf->add($url); 
           if(isset($payload['options']) && isset($payload['options']['pdf'])) 
           { 
               foreach($payload['options']['pdf'] as $k=>$v) 
               { 
                   $pdf->addOption($k,$v); 
               } 
           } 
           list($id,$path) = $pdf->compile(); 
 
           if(isset($payload['options']) && isset($payload['options']['pdf']['mode']) && $payload['options']['pdf']['mode']=='local') 
           { 
               return new JsonResponse(array( 
                   'success'=>true, 
                   'message'=>'Succeed', 
                   'id'=>$id, 
                   'path'=>$path 
               )); 
           } 
           $file = new File($path); 
           return new BinaryFileResponse($path); 
       } 
       catch(Exception $e) 
       { 
           return new JsonResponse(array( 
              'success'=>false, 
              'message'=>$e->getMessage() 
           )); 
       } 
    } 
 
}