<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\Campaigns;
use App\Models\Countries;
use App\Models\Registrations;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use setasign\Fpdi\Fpdi;
use Intervention\Image\Facades\Image;
use Endroid\QrCode\Color\Color;
use Endroid\QrCode\Encoding\Encoding;
use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow;
use Endroid\QrCode\QrCode;
use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin;
use Endroid\QrCode\Writer\PngWriter;



class PdfController extends Controller
{
    public function generateMultipagePdf(Request $request, $ids)
    {
        $registration_ids = $ids;
        $ids = explode(",", $ids);
        foreach ($ids as $id) {
            $data = Registrations::findOrFail($id);
            $name = slugify($data->name);
            $pdfTemplatePath = public_path(env("CLIENT_PATH") . '/form.pdf');
            $filledPdfPath = public_path(env("CLIENT_PATH") . '/generated/' . $name . '-registration-form-' . $id . '.pdf');
            if (!file_exists($filledPdfPath)) {
                $pdf = new Fpdi();

                // Add a page
                $pdf->AddPage();

                // Set the template file
                $pdf->setSourceFile($pdfTemplatePath);
                $tplIdx = $pdf->importPage(1);

                // Use the template
                $pdf->useTemplate($tplIdx);

                // Set form field values based on your data
                $pdf->SetFont('Arial');
                $pdf->SetXY(102, 7);
                $pdf->Write(0, $data->name);
                $pdf->SetFont('Arial');
                $pdf->SetFontSize('7');
                $pdf->SetXY(102, 22);
                $pdf->Write(0, $data->email);
                $pdf->SetXY(162, 22);
                $pdf->Write(0, $data->mobile);
                $pdf->SetXY(118, 34);
                $pdf->Write(0, $data->highest_qualification);
                $pdf->SetXY(177, 34);
                $pdf->Write(0, ($data->highest_grade) ? $data->highest_grade : "");
                $pdf->SetXY(108, 46);
                $pdf->Write(0, ($data->preparation_class) ? $data->preparation_class : "");
                $pdf->SetXY(177, 46);
                $pdf->Write(0, ($data->preparation_score) ? $data->preparation_score : "");
                $pdf->SetXY(118, 60);
                $pdf->Write(0, ($data->intrested_for_country) ? $data->intrested_for_country : "AAA");
                $pdf->SetXY(68, 25);
                $pdf->SetFontSize('14');
                $pdf->Write(0, ($data->registration_id) ? $data->registration_id : "AAA");

                // Repeat the above steps for other form fields

                // Output or download the filled PDF
                $pdf->Output($filledPdfPath, 'F');  //D for Download
            }
        }
        //return response()->file($filledPdfPath)->deleteFileAfterSend(true);

    }
    public function generatePdf(Request $request)
    {
        $registration_id =  $request->query('id');
        $data = Registrations::findOrFail($registration_id);
        $name = slugify($data->name);
        $pdfTemplatePath = public_path(env("CLIENT_PATH") . '/inquiry-form-org.pdf');
        $filledPdfPath = public_path(env("CLIENT_PATH") . '/generated/' . $name . '-enquiry-form-' . $registration_id . '.pdf');
        if (!file_exists($filledPdfPath)) {
            $pdf = new Fpdi();
            // $pdf->SetMargins(float $left, float $top, float $right = -1, bool $resetPage = true);
            $pdf->SetMargins(0,0,0);
            $pdf->SetAutoPageBreak(false);
            $pdf->AddPage('potrait', 'A5');
            $border=0;
            $pdf->setSourceFile($pdfTemplatePath);
            $tplIdx = $pdf->importPage(1);
            $pdf->useTemplate($tplIdx);
            $pdf->SetFont('Arial');
            $pdf->SetFontSize('7');
            $pdf->SetXY(13, 32);
            $pdf->Cell(13, 3, "Registration ID: " . (($data->registration_id) ? $data->registration_id : "ID"), $border, 1, "L");
            
            $pdf->SetXY(23, 41.5);
            $pdf->Cell(113, 3, ($data->name) ? $data->name : "", $border, 1, "L");
            
            $pdf->SetXY(30, 46.5);
            $pdf->Cell(34, 3, ($data->dob) ? $data->dob : "", $border, 1, "L");
            
            $pdf->SetXY(77, 46.5);
            $pdf->Cell(15, 3, ($data->gender) ? $data->gender : "", $border, 1, "L");
            
            $pdf->SetXY(111, 46.5);
            $pdf->Cell(25, 3, ($data->marital_status) ? $data->marital_status : "", $border, 1, "L");
            
            $pdf->SetXY(39, 52);
            $pdf->Cell(37, 3, ($data->mobile) ? $data->mobile : "", $border, 1, "L");
            
            $pdf->SetXY(88, 52);
            $pdf->Cell(48, 3, ($data->email) ? $data->email : "", $border, 1, "L");
            
            $pdf->SetXY(26, 57.7);
            $pdf->Cell(110, 3, ($data->address) ? $data->address : "", $border, 1, "L");
            
            $pdf->SetXY(37, 63);
            $pdf->Cell(56, 3, ($data->guardian_name) ? $data->guardian_name : "", $border, 1, "L");
            
            $pdf->SetXY(106, 63);
            $pdf->Cell(30, 3, ($data->phone) ? $data->phone : "", $border, 1, "L");
            
            $pdf->SetXY(53, 69);
            $pdf->Cell(83, 3, ($data->applied_before) ? $data->applied_before : "", $border, 1, "L");
            
            $pdf->SetXY(96, 78);           
            $pdf->Cell(40, 3, $data->highest_qualification, $border, 1, "R"); //$pdf->Cell(float $w, float $h = 0, string $txt = '', mixed $border = 0, int $ln = 0, string $align = '', bool $fill = false, mixed $link = '')
            
            $pdf->SetXY(41, 86.5);
            $pdf->Cell(28, 3, ($data->see_stream) ? $data->see_stream : "", $border, 1, "C");
            $pdf->SetXY(72, 86.5);
            $pdf->Cell(28, 3, ($data->see_school) ? $data->see_school : "", $border, 1, "C");
            $pdf->SetXY(102, 86.5);
            $pdf->Cell(16.5, 3, ($data->see_grade) ? $data->see_grade : "", $border, 1, "C");
            $pdf->SetXY(120.5, 86.5);
            $pdf->Cell(15, 3, ($data->see_year) ? $data->see_year : "", $border, 1, "C");

            $lineY=91.5;
            $pdf->SetXY(41, $lineY);
            $pdf->Cell(28, 3, ($data->plus2_stream) ? $data->plus2_stream : "", $border, 1, "C");
            $pdf->SetXY(72, $lineY);
            $pdf->Cell(28, 3, ($data->plus2_college) ? $data->plus2_college : "", $border, 1, "C");
            $pdf->SetXY(102, $lineY);
            $pdf->Cell(16.5, 3, ($data->plus2_grade) ? $data->plus2_grade : "", $border, 1, "C");
            $pdf->SetXY(120.5, $lineY);
            $pdf->Cell(15, 3, ($data->plus2_year) ? $data->plus2_year : "", $border, 1, "C");
            
            $lineY=97;
            $pdf->SetXY(41, $lineY);
            $pdf->Cell(28, 3, ($data->bachelors_stream) ? $data->bachelors_stream : "", $border, 1, "C");
            $pdf->SetXY(72, $lineY);
            $pdf->Cell(28, 3, ($data->bachelors_college) ? $data->bachelors_college : "", $border, 1, "C");
            $pdf->SetXY(102, $lineY);
            $pdf->Cell(16.5, 3, ($data->bachelors_grade) ? $data->bachelors_grade : "", $border, 1, "C");
            $pdf->SetXY(120.5, $lineY);
            $pdf->Cell(15, 3, ($data->bachelors_year) ? $data->bachelors_year : "", $border, 1, "C");
            
            $lineY=102.5;
            $pdf->SetXY(41, $lineY);
            $pdf->Cell(28, 3, ($data->highest_stream) ? $data->highest_stream : "", $border, 1, "C");
            $pdf->SetXY(72, $lineY);
            $pdf->Cell(28, 3, ($data->highest_college) ? $data->highest_college : "", $border, 1, "C");
            $pdf->SetXY(102, $lineY);
            $pdf->Cell(16.5, 3, ($data->highest_grade) ? $data->highest_grade : "", $border, 1, "C");
            $pdf->SetXY(120.5, $lineY);
            $pdf->Cell(15, 3, ($data->highest_year) ? $data->highest_year : "", $border, 1, "C");

            $pdf->SetXY(36, 109.7);
            $pdf->Cell(100, 3, ($data->experience) ? $data->experience : "", $border, 1, "L");
            $pdf->SetXY(44, 115.7);
            $pdf->Cell(92, 3, ($data->intrested_for_country) ? Countries::where("country_id",$data->intrested_for_country)->first()->title : "", $border, 1, "L");
            
            $pdf->SetXY(36, 123.7);
            $pdf->Cell(29, 3, ($data->preparation_class) ? $data->preparation_class : "", $border, 1, "L");
            
            $pdf->SetXY(80, 123.7);
            $pdf->Cell(56, 3, ($data->preparation_score) ? $data->preparation_score : "", $border, 1, "L");
            
            $pdf->SetXY(50, 133.5);
            $pdf->Cell(38, 3, ($data->how_you_know) ? $data->how_you_know : "", $border, 1, "L");
            
            $pdf->SetXY(105, 133.5);
            $pdf->Cell(18, 3, ($data->reference) ? $data->reference : "", $border, 1, "L");
            
            
            $pdf->SetXY(15, 196);
            $pdf->Cell(25, 3,  "", $border, 1, "L");

            $pdf->SetXY(70, 196);
            $pdf->Cell(21, 3, (($data->created_at) ? date('Y-m-d', strtotime($data->created_at)) : "date"), $border, 1, "C");
            
            $pdf->SetXY(120, 196);
            $pdf->Cell(25, 3, "", $border, 1, "L");

            // $pdf->Cell(0, 10, json_encode($data), 0, 1, 'R');
            //$pdf->Write(float $h, string $txt, mixed $link = '');
            //$pdf->Cell(float $w, float $h = 0, string $txt = '', mixed $border = 0, int $ln = 0, string $align = '', bool $fill = false, mixed $link = '')
            // $pdf->MultiCell(float $w, float $h, string $txt, mixed $border = 0, string $align = 'J', bool $fill = false);

            // $pdf->MultiCell(120, 3, json_encode($data), 0, "R", false);


            // Repeat the above steps for other form fields

            // Output or download the filled PDF
            $pdf->Output($filledPdfPath, 'D');  //D for Download
        }
    }
    //return response()->file($filledPdfPath)->deleteFileAfterSend(true);
    public function generatePass(Request $request)
    {
        
        $registration_id =  $request->query('id');
        $data = Registrations::findOrFail($registration_id);

        $registration = DB::table("registrations")
            ->where('status', 1)
            ->where('registration_id', $registration_id)
            ->orderBy('display_order')
            ->first();
        if (!$registration) {
            // Handle the case where the registration is not found
            return;
        }
        $Campaign = Campaigns::findOrFail($registration->campaigns_id);
        $QRURL = route("registration.view", md5($registration_id));
        $writer = new PngWriter();
        $qrCode = QrCode::create($QRURL)
            ->setEncoding(new Encoding('UTF-8'))
            ->setErrorCorrectionLevel(new ErrorCorrectionLevelLow())
            ->setSize(150)
            ->setMargin(1)
            ->setRoundBlockSizeMode(new RoundBlockSizeModeMargin())
            ->setForegroundColor(new Color(0, 0, 0))
            ->setBackgroundColor(new Color(255, 255, 255));
        $result = $writer->write($qrCode);
        $dataUri = $result->getDataUri();
        if ($Campaign->pass_layout != "") {
            $pass_layout = storage_path(str_replace("storage/", "app/public/", $Campaign->pass_layout));
            $backgroundImage = Image::make($pass_layout);
        } else {
            $backgroundImage = Image::make(public_path(env("CLIENT_PATH") . '/assets/images/pass.png'));
        }
        $qrCodeImage = Image::make($dataUri);
        $qrCodePosition = ($Campaign->qr_position != "") ? $Campaign->qr_position : "100,100";
        $qrCodePosition = explode(",", $qrCodePosition);
        $backgroundImage->insert($qrCodeImage, 'top-left', $qrCodePosition[0], $qrCodePosition[1]);
        $text = $registration->registration_id;
        $idPosition = ($Campaign->id_position != "") ? $Campaign->id_position : "100,100";
        $idPosition = explode(",", $idPosition);
        $fontPath = public_path('assets/fonts/Poppins-Regular.ttf'); // Replace with the actual font path
        $backgroundImage->text($text, $idPosition[0], $idPosition[1], function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(16);
            $font->color('#000');
            $font->align('left');
            $font->valign('top');
        });
        $text = $registration->name;
        $namePosition = ($Campaign->name_position != "") ? $Campaign->name_position : "100,100";
        $namePosition = explode(",", $namePosition);
        $fontPath = public_path('assets/fonts/Poppins-Regular.ttf'); // Replace with the actual font path
        $backgroundImage->text($text, $namePosition[0], $namePosition[1], function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(24);
            $font->color('#ffffff');
            $font->align('left');
            $font->valign('top');
        });
        $text = $registration->email;
        $emailPosition = ($Campaign->email_position != "") ? $Campaign->email_position : "100,100";
        $emailPosition = explode(",", $emailPosition);
        $fontPath = public_path('assets/fonts/Poppins-Regular.ttf'); // Replace with the actual font path
        $backgroundImage->text($text, $emailPosition[0], $emailPosition[1], function ($font) use ($fontPath) {
            $font->file($fontPath);
            $font->size(20);
            $font->color('#fff');
            $font->align('left');
            $font->valign('top');
        });
        
        $outputPath = public_path(env("CLIENT_PATH") . '/assets/images/generated/pass_' . date("ymdhis") . '_image.png');
        $backgroundImage->save($outputPath);        
        $qr_code=$outputPath;
        $downloadFileName = env("CLIENT_PATH").'_pass.png';
        return response()->download($qr_code, $downloadFileName);
    }

}