<?php
namespace App\Service;
use App\Core\Service\Logger;
require_once dirname(__DIR__, 2).'/vendor/autoload.php';
class Pdf
{
    private $mpdf;
    private $settings  = [
        'mode' => 'utf-8', 
        'format' => 'A4',
        'orientation' => 'P',
        'margin_left' => 10,
        'margin_right' => 10,
        'margin_top' => 10,
        'margin_bottom' => 10,
        'margin_header' => 0,
        'margin_footer' => 0,
        'default_font_size' => 12,
        'default_font' => 'dejavusans',
    ];
    public function __construct($settings) {
        if(!empty($settings)) {
            if(!empty($settings['mode'])) {
                $this->settings['mode'] = $settings['mode'];
            }
            if(!empty($settings['format'])) {
                $this->settings['format'] = $settings['format'];
            }
            if(!empty($settings['orientation'])) {
                $this->settings['orientation'] = $settings['orientation'];
            }
            if(!empty($settings['margin_left'])) {
                $this->settings['margin_left'] = $settings['margin_left'];
            }
            if(!empty($settings['margin_right'])) {
                $this->settings['margin_right'] = $settings['margin_right'];
            }
            if(!empty($settings['margin_top'])) {
                $this->settings['margin_top'] = $settings['margin_top'];
            }
            if(!empty($settings['margin_bottom'])) {
                $this->settings['margin_bottom'] = $settings['margin_bottom'];
            }
            if(!empty($settings['margin_header'])) {
                $this->settings['margin_header'] = $settings['margin_header'];
            }
            if(!empty($settings['margin_footer'])) {
                $this->settings['margin_footer'] = $settings['margin_footer'];
            }
            if(!empty($settings['default_font_size'])) {
                $this->settings['default_font_size'] = $settings['default_font_size'];
            }
            if(!empty($settings['default_font'])) {
                $this->settings['default_font'] = $settings['default_font'];
            }
        }
        $this->mpdf = new \Mpdf\Mpdf($this->settings);
    }

    public function generate(String $content, String $filepath, String $outputMode = 'I', String $title = '', String $font_family = '', String $font_size = ''): mixed {
        try {
            if(!empty($title)) {
                $this->mpdf->SetTitle($title);
            }
            if(!empty($font_family)){
                $this->mpdf->SetDefaultBodyCSS('font-family', $font_family);
            }
            if(!empty($font_size)){
                $this->mpdf->SetDefaultBodyCSS('font-size', $font_size);
            }
            $this->mpdf->WriteHTML($content); 
            if($outputMode == 'I') {
                return $this->mpdf->Output($filepath, $outputMode);    
            }
            $this->mpdf->Output($filepath, $outputMode);
            return true;
        } catch(\Exception $e) {
            Logger::error($e->getMessage(), ['File' => $e->getFile(), 'Line'=>$e->getLine()]);
            return false;
        }
    }
} 