{$entity};
        if ($entity == 'invoice') {
            $path = $entity_obj->client->invoice_filepath($invitation);
        }
        if ($entity == 'quote') {
            $path = $entity_obj->client->quote_filepath($invitation);
        }
        if ($entity == 'credit') {
            $path = $entity_obj->client->credit_filepath($invitation);
        }
        if ($entity == 'recurring_invoice') {
            $path = $entity_obj->client->recurring_invoice_filepath($invitation);
        }
        $file_path = $path.$entity_obj->numberFormatter().'.pdf';
        $url = config('ninja.app_url').'/phantom/'.$entity.'/'.$invitation->key.'?phantomjs_secret='.config('ninja.phantomjs_secret');
        info($url);
        $key = config('ninja.phantomjs_key');
        $phantom_url = "https://phantomjscloud.com/api/browser/v2/{$key}/";
        $pdf = CurlUtils::post($phantom_url, json_encode([
            'url'            => $url,
            'renderType'     => 'pdf',
            'outputAsJson'   => false,
            'renderSettings' => [
                'emulateMedia' => 'print',
                'pdfOptions'   => [
                    'preferCSSPageSize' => true,
                    'printBackground'   => true,
                ],
            ],
        ]));
        $this->checkMime($pdf, $invitation, $entity);
        $numbered_pdf = $this->pageNumbering($pdf, $invitation->company);
        if ($numbered_pdf) {
            $pdf = $numbered_pdf;
        }
        if (! Storage::disk(config('filesystems.default'))->exists($path)) {
            Storage::disk(config('filesystems.default'))->makeDirectory($path);
        }
        $instance = Storage::disk(config('filesystems.default'))->put($file_path, $pdf);
        if ($return_pdf) {
            return $pdf;
        }
        return $file_path;
    }
    public function convertHtmlToPdf($html)
    {
        $key = config('ninja.phantomjs_key');
        $phantom_url = "https://phantomjscloud.com/api/browser/v2/{$key}/";
        $pdf = CurlUtils::post($phantom_url, json_encode([
            'content'            => $html,
            'renderType'     => 'pdf',
            'outputAsJson'   => false,
            'renderSettings' => [
                'emulateMedia' => 'print',
                'pdfOptions'   => [
                    'preferCSSPageSize' => true,
                    'printBackground'   => true,
                ],
            ],
        ]));
        $response = Response::make($pdf, 200);
        $response->header('Content-Type', 'application/pdf');
        return $response;
    }
    /* Check if the returning PDF is valid. */
    private function checkMime($pdf, $invitation, $entity)
    {
        $finfo = new \finfo(FILEINFO_MIME);
        if ($finfo->buffer($pdf) != 'application/pdf; charset=binary') {
            SystemLogger::dispatch(
                $pdf,
                SystemLog::CATEGORY_PDF,
                SystemLog::EVENT_PDF_RESPONSE,
                SystemLog::TYPE_PDF_FAILURE,
                $invitation->contact->client,
                $invitation->company,
            );
            throw new PhantomPDFFailure('There was an error generating the PDF with Phantom JS');
        } else {
            SystemLogger::dispatch(
                'Entity PDF generated sucessfully => '.$invitation->{$entity}->number,
                SystemLog::CATEGORY_PDF,
                SystemLog::EVENT_PDF_RESPONSE,
                SystemLog::TYPE_PDF_SUCCESS,
                $invitation->contact->client,
                $invitation->company,
            );
        }
    }
    public function displayInvitation(string $entity, string $invitation_key)
    {
        $key = $entity.'_id';
        $invitation_instance = 'App\Models\\'.ucfirst(Str::camel($entity)).'Invitation';
        $invitation = $invitation_instance::where('key', $invitation_key)->first();
        $entity_obj = $invitation->{$entity};
        $entity_obj->load('client');
        App::setLocale($invitation->contact->preferredLocale());
        $entity_design_id = $entity.'_design_id';
        if ($entity == 'recurring_invoice') {
            $entity_design_id = 'invoice_design_id';
        }
        $design_id = $entity_obj->design_id ? $entity_obj->design_id : $this->decodePrimaryKey($entity_obj->client->getSetting($entity_design_id));
        $design = Design::withTrashed()->find($design_id);
        $html = new HtmlEngine($invitation);
        if ($design->is_custom) {
            $options = [
                'custom_partials' => json_decode(json_encode($design->design), true),
            ];
            $template = new PdfMakerDesign(PdfDesignModel::CUSTOM, $options);
        } else {
            $template = new PdfMakerDesign(strtolower($design->name));
        }
        $state = [
            'template' => $template->elements([
                'client' => $entity_obj->client,
                'entity' => $entity_obj,
                'pdf_variables' => (array) $entity_obj->company->settings->pdf_variables,
                '$product' => $design->design->product,
            ]),
            'variables' => $html->generateLabelsAndValues(),
            'options' => [
                'all_pages_header' => $entity_obj->client->getSetting('all_pages_header'),
                'all_pages_footer' => $entity_obj->client->getSetting('all_pages_footer'),
            ],
            'process_markdown' => $entity_obj->client->company->markdown_enabled,
        ];
        $maker = new PdfMakerService($state);
        $data['html'] = $maker->design($template)
                              ->build()
                              ->getCompiledHTML(true);
        if (config('ninja.log_pdf_html')) {
            info($data['html']);
        }
        return view('pdf.html', $data);
    }
    public function blade()
    {
        $i = \App\Models\Invoice::first();
        $html_variables = (new HtmlEngine($i->invitations->first()))->makeValuesNoPrefix();
        $variables = (new HtmlEngine($i->invitations->first()))->makeValuesNoPrefix();
        $html_variables = array_merge($html_variables, $variables);
        // $smarty->assign($html_variables);
        $template_string = '
        display {$foo} here 
        
        {if $invoice.amount > 5}
        
        ewwo {$invoice.amount * 5}
        {/if}
    
         {if isset($entry) && is_array($entry)}
         I am a puppet
         {/if}
    
         {if 1 > 0}
        1 is greater than 0
        {/if}
    
         {if 0 > 1}
        0 is greater than 1
        {/if}
    
    
         {foreach $countries as $country}
        
        {if $country.name = "Australia"}
         {$country.name}
        {/if}
        
         {/foreach}
        
{foreach $invoice.line_items as $item}
 {$item->quantity} - {$item->cost} - {$item->notes} - {$item->line_total}
{/foreach}
        echo "I am a puppet";
        
        
        ';
$template_string = '