<?php

namespace App\Filament\Resources\ProductionQuantityResource\Pages;

use App\Filament\Resources\ProductionQuantityResource;
use App\Filament\Widgets\ItemOverview;
use App\Models\ProductionQuantity;
use App\Models\Shift;
use App\Models\Item;
use Carbon\Carbon;
use Filament\Actions;
use Filament\Facades\Filament;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\CreateRecord;
use Filament\Support\Enums\MaxWidth;
use Livewire\Livewire;
use Log;
use Route;

class CreateProductionQuantity extends CreateRecord
{
    public $plantId;

    public $lineId;
    protected static string $resource = ProductionQuantityResource::class;

    protected static string $view = 'filament.resources.invoice-validation-resource.pages.hourly-quantity-table';

    // public function getTitle(): string
    // {
    //     return 'Create'; // This should display in the breadcrumb as "Production Quantities > Create"
    // }

    // Hide only the big H1 heading on the page
    public function getHeading(): string
    {
        return '';
    }


    public function boot(): void
    {
       // dd('Current Route: ' . Route::currentRouteName());
        Filament::registerRenderHook(
            'panels::body.start',
            function () {
                if (str_contains(Route::currentRouteName(), 'filament.admin.resources.production-quantities.create')) {
                    echo <<<HTML
                        <style>
                            /* Hide sidebar and topbar */
                            .fi-sidebar,
                            .fi-topbar {
                                display: none !important;
                            }

                            /* Expand main container to full screen */
                            .fi-main {
                                margin: 0 !important;
                                padding: 0 !important;
                                /* height: 20%; */
                                max-width: 100% !important;
                                overflow-y: auto; Allow vertical scrolling
                            }

                            /* Expand page area fully */
                            .fi-main > .fi-page {
                                padding: 0 !important;
                                max-width: 100% !important;
                            }

                            /* Allow scroll on body again */
                            body {
                                overflow: auto;
                            }

                        </style>

                        <!-- <script>
                        window.addEventListener('keydown', function(event) {
                                if (event.key === 'F11') {
                                    toggleFullScreen();
                                }
                            });
                        </script> -->

                    HTML;
                }
            }
        );
    }

    // public function getMaxContentWidth(): MaxWidth
    // {
    //     return MaxWidth::Full;
    // }

    // protected function getFooterWidgets(): array
    // {
    //     return [
    //         ItemOverview::make(),
    //     ];
    // }

    protected function getRedirectUrl(): string
    {
        return $this->getResource()::getUrl('create'); // Stay on Create Page after saving
    }

    public $qrData, $pId, $bId, $sId, $lId, $iId, $succId, $sNoId, $succStat, $recQr, $prodOrder;

    // protected static bool $canCreateAnother = false;

    public function getFormActions(): array
    {
        // return parent::getFormActions(); //return [];
        // return [
        //     $this->getCancelFormAction(),
        // ];
        return [];
    }

    public function processAllValues($formQRData)
    {
        //$formValues = [];
        // This will get all form data from the request
        $this->qrData = null;
        $this->iId = null;
        $this->succId = null;
        $this->sNoId = null;
        $this->succStat = null;
        $formValues = request()->all();
        $this->validateAndProcessForm($formValues, $formQRData); // Process the form values
    }

    public function validateAndProcessForm($formValues, $formQRData)
    {
        $user = Filament::auth()->user(); //->name
        $operatorName = $user->name;
        // $this->validate();

        try {
            // Access the nested form data
            $componentData = json_decode($formValues['components'][0]['snapshot'], true);
            $formData = $componentData['data']['data'][0]; // Access first item in data array

            // Extract specific values
            $this->qrData = $formQRData ?? $formData['item_code'];
            $this->pId = $formData['plant_id'] ?? null;
            $this->bId = $formData['block_name'] ?? null;
            $this->sId = $formData['shift_id'] ?? null;
            $this->lId = $formData['line_id'] ?? null;
            $this->iId = $formData['item_id'] ?? null;
            $this->succId = $formData['success_msg'] ?? null;
            // $this->sNoId = $formData['serial_number'] ?? null;
            $this->prodOrder = $formData['production_order'] ?? null;
            $this->recQr = $formData['recent_qr'] ?? null;
            $this->dispatch('plant-line-updated', $this->pId,$this->lId);
        } catch (\Exception $e) {
            //dd('Error parsing form data:', $e->getMessage(), $formValues);
            Notification::make()
                ->title("Error Parsing Form Data") // {$operatorName}
                ->body($e->getMessage())
                ->danger()
                // ->persistent()
                ->seconds(2)
                ->send();
            return;
        }

        // dd($formData, $formQRData);
        // dd($this->form->getState()['serial_number']);

        if (empty($formQRData)) {
            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $this->recQr,
            ]);
            Notification::make()
                ->title('Invalid QR')
                ->body("Scan the valid QR code.<br>(Ex: Item_Code|Serial_Number )")
                ->danger()
                ->seconds(2)
                ->send();
            return;
        }
        else
        {
            if (!$this->pId) {
                $this->form->fill([
                    'plant_id'=> null,
                    'block_name'=> null,
                    'shift_id'=> null,
                    'line_id'=> null,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> null,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);
                Notification::make()
                    ->title('Choose Plant')
                    ->body("Please select a plant first.")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }
            else if (!$this->bId) {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> null,
                    'shift_id'=> null,
                    'line_id'=> null,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> null,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);
                Notification::make()
                    ->title('Choose Block')
                    ->body("Please select a block first.")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }
            else if (!$this->sId) {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> null,
                    'line_id'=> null,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> null,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);
                Notification::make()
                    ->title('Choose Shift')
                    ->body("Please select a shift first.")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }
            else if (!$this->lId) {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> $this->sId,
                    'line_id'=> null,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> null,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);
                Notification::make()
                    ->title('Choose Line')
                    ->body("Please select a line first.")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }
            else if (!$this->prodOrder) {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> $this->sId,
                    'line_id'=> $this->lId,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> null,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);
                Notification::make()
                    ->title('Please scan the production order first.')
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }

            if(!is_numeric($this->prodOrder))
            {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> $this->sId,
                    'line_id'=> $this->lId,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> null,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);

                Notification::make()
                    ->title('Invalid Production Order')
                    ->body("Must contain numeric values only.")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }
            else if (!preg_match('/^[1-9][0-9]{6,13}$/', $this->prodOrder))
            {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> $this->sId,
                    'line_id'=> $this->lId,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> null,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);

                Notification::make()
                    ->title('Invalid Production Order')
                    ->body("Must be a numeric value with 7 to 14 digits.<br>Must start with a non-zero digit.")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }

            // ********************************

            $exists = \App\Models\ProductionPlan::where('plant_id', $this->pId)
                ->where('shift_id', $this->sId)
                ->where('line_id', $this->lId)
                ->whereDate('created_at', today())
                ->latest()
                ->exists();

            if ($exists)
            {
                $currentDate = date('Y-m-d');

                $shiftId = Shift::where('id', $this->sId)
                ->first();

                [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
                $hRs = (int) $hRs;
                //$miNs = (int) $miNs;-*/

                $totalMinutes = $hRs * 60 + $miNs;

                $from_dt = $currentDate . ' ' . $shiftId->start_time;

                $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));

                $currentDateTime = date('Y-m-d H:i:s');

                // Check if current date time is within the range
                if (!($currentDateTime >= $from_dt && $currentDateTime < $to_dt)) {
                    //echo "Choosed a valid shift...";
                    // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');

                    $this->form->fill([
                        'plant_id'=> $this->pId,
                        'block_name'=> $this->bId,
                        'shift_id'=> $this->sId,
                        'line_id'=> $this->lId,
                        'item_id'=> null,
                        'serial_number'=> null,
                        'success_msg'=> null,
                        'production_order'=> $this->prodOrder,
                        'sap_msg_status' => null,
                        'sap_msg_description' => null,
                        'operator_id'=> $operatorName,
                        'recent_qr' => $this->recQr,
                    ]);
                    Notification::make()
                        ->title('Invalid Shift')
                        ->body("Please select a valid shift.")
                        ->danger()
                        ->seconds(2)
                        ->send();
                    //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
                    return;
                }
                else
                {
                    $this->form->fill([
                        'plant_id'=> $this->pId,
                        'block_name'=> $this->bId,
                        'shift_id'=> $this->sId,
                        'line_id'=> $this->lId,
                        'item_id'=> null,
                        'serial_number'=> null,
                        'success_msg'=> null,
                        'production_order'=> $this->prodOrder,
                        'sap_msg_status' => null,
                        'sap_msg_description' => null,
                        'operator_id'=> $operatorName,
                        'recent_qr' => $this->recQr,
                    ]);
                }
            }
            else
            {
                $existShifts = \App\Models\ProductionPlan::where('plant_id', $this->pId)
                ->where('shift_id', $this->sId)
                ->where('line_id', $this->lId)
                ->whereDate('created_at', Carbon::yesterday())
                ->latest()
                ->exists();

                if ($existShifts) //if ($existShifts->count() > 0)
                { // record exist on yesterday
                    //$currentDate = date('Y-m-d');
                    $yesterday = date('Y-m-d', strtotime('-1 days'));

                    $shiftId = Shift::where('id', $this->sId)
                    ->first();

                    [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
                    $hRs = (int) $hRs;
                    //   $miNs = (int) $miNs;-*/

                    $totalMinutes = $hRs * 60 + $miNs;

                    $from_dt = $yesterday . ' ' . $shiftId->start_time;

                    $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));

                    $currentDateTime = date('Y-m-d H:i:s');

                    // Check if current date time is within the range
                    if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
                        $this->form->fill([
                            'plant_id'=> $this->pId,
                            'block_name'=> $this->bId,
                            'shift_id'=> $this->sId,
                            'line_id'=> $this->lId,
                            'item_id'=> null,
                            'serial_number'=> null,
                            'success_msg'=> null,
                            'production_order'=> $this->prodOrder,
                            'sap_msg_status' => null,
                            'sap_msg_description' => null,
                            'operator_id'=> $operatorName,
                            'recent_qr' => $this->recQr,
                        ]);
                    }
                    else
                    {
                        $currentDate = date('Y-m-d');

                        $shiftId = Shift::where('id', $this->sId)
                        ->first();

                        [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
                        $hRs = (int) $hRs;
                        //   $miNs = (int) $miNs;-*/

                        $totalMinutes = $hRs * 60 + $miNs;

                        $from_dt = $currentDate . ' ' . $shiftId->start_time;

                        $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));

                        $currentDateTime = date('Y-m-d H:i:s');

                        // Check if current date time is within the range
                        if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
                            //echo "Choosed a valid shift...";
                            // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');

                            $this->form->fill([
                                'plant_id'=> $this->pId,
                                'block_name'=> $this->bId,
                                'shift_id'=> $this->sId,
                                'line_id'=> $this->lId,
                                'item_id'=> null,
                                'serial_number'=> null,
                                'success_msg'=> null,
                                'production_order'=> $this->prodOrder,
                                'sap_msg_status' => null,
                                'sap_msg_description' => null,
                                'operator_id'=> $operatorName,
                                'recent_qr' => $this->recQr,
                            ]);
                            Notification::make()
                                ->title('Plan Not Found')
                                ->body("Please set production plan first.")
                                ->danger()
                                ->seconds(2)
                                ->send();
                            //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
                            return;
                        }
                        else
                        {
                            //echo "Choosed a valid shift...";
                            // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');

                            $this->form->fill([
                                'plant_id'=> $this->pId,
                                'block_name'=> $this->bId,
                                'shift_id'=> $this->sId,
                                'line_id'=> $this->lId,
                                'item_id'=> null,
                                'serial_number'=> null,
                                'success_msg'=> null,
                                'production_order'=> $this->prodOrder,
                                'sap_msg_status' => null,
                                'sap_msg_description' => null,
                                'operator_id'=> $operatorName,
                                'recent_qr' => $this->recQr,
                            ]);
                            Notification::make()
                                ->title('Invalid Shift')
                                ->body("Please select a valid shift.")
                                ->danger()
                                ->seconds(2)
                                ->send();
                            //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
                            return;
                        }
                    }
                }
                else
                { // record not exist on yesterday

                    //$currentDate = date('Y-m-d');
                    $yesterday = date('Y-m-d', strtotime('-1 days'));

                    $shiftId = Shift::where('id', $this->sId)
                    ->first();

                    [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
                    $hRs = (int) $hRs;
                    //   $miNs = (int) $miNs;-*/

                    $totalMinutes = $hRs * 60 + $miNs;

                    $from_dt = $yesterday . ' ' . $shiftId->start_time;

                    $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));

                    $currentDateTime = date('Y-m-d H:i:s');

                    // Check if current date time is within the range
                    if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
                        //echo "Choosed a valid shift...";
                        // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');

                        $this->form->fill([
                            'plant_id'=> $this->pId,
                            'block_name'=> $this->bId,
                            'shift_id'=> $this->sId,
                            'line_id'=> $this->lId,
                            'item_id'=> null,
                            'serial_number'=> null,
                            'success_msg'=> null,
                            'production_order'=> $this->prodOrder,
                            'sap_msg_status' => null,
                            'sap_msg_description' => null,
                            'operator_id'=> $operatorName,
                            'recent_qr' => $this->recQr,
                        ]);
                        Notification::make()
                            ->title('Plan Not Found')
                            ->body("Please set production plan first.")
                            ->danger()
                            ->seconds(2)
                            ->send();
                        //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
                        return;
                    }
                    else
                    {
                        $currentDate = date('Y-m-d');

                        $shiftId = Shift::where('id', $this->sId)
                        ->first();

                        [$hRs, $miNs] = explode('.', $shiftId->duration) + [0, 0];
                        $hRs = (int) $hRs;
                        //   $miNs = (int) $miNs;-*/

                        $totalMinutes = $hRs * 60 + $miNs;

                        $from_dt = $currentDate . ' ' . $shiftId->start_time;

                        $to_dt = date('Y-m-d H:i:s', strtotime($from_dt . " + $totalMinutes minutes"));

                        $currentDateTime = date('Y-m-d H:i:s');

                        // Check if current date time is within the range
                        if ($currentDateTime >= $from_dt && $currentDateTime < $to_dt) {
                            //echo "Choosed a valid shift...";
                            // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');

                            $this->form->fill([
                                'plant_id'=> $this->pId,
                                'block_name'=> $this->bId,
                                'shift_id'=> $this->sId,
                                'line_id'=> $this->lId,
                                'item_id'=> null,
                                'serial_number'=> null,
                                'success_msg'=> null,
                                'production_order'=> $this->prodOrder,
                                'sap_msg_status' => null,
                                'sap_msg_description' => null,
                                'operator_id'=> $operatorName,
                                'recent_qr' => $this->recQr,
                            ]);
                            Notification::make()
                                ->title('Plan Not Found')
                                ->body("Please set production plan first.")
                                ->danger()
                                ->seconds(2)
                                ->send();
                            //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
                            return;
                        }
                        else
                        {
                            //echo "Choosed a valid shift...";
                            // $set('ppLineError', 'Valid (From: '.$from_dt.', To: '.$to_dt.')');

                            $this->form->fill([
                                'plant_id'=> $this->pId,
                                'block_name'=> $this->bId,
                                'shift_id'=> $this->sId,
                                'line_id'=> $this->lId,
                                'item_id'=> null,
                                'serial_number'=> null,
                                'success_msg'=> null,
                                'production_order'=> $this->prodOrder,
                                'sap_msg_status' => null,
                                'sap_msg_description' => null,
                                'operator_id'=> $operatorName,
                                'recent_qr' => $this->recQr,
                            ]);
                            Notification::make()
                                ->title('Invalid Shift')
                                ->body("Please select a valid shift.")
                                ->danger()
                                ->seconds(2)
                                ->send();
                            //$set('validationError', 'Curr.'.$currentDateTime.' (From: '.$from_dt.', To: '.$to_dt.')');
                            return;
                        }
                    }
                }
            }

            // ********************************

            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $this->recQr,
            ]);
        }

        if (!preg_match('/^[a-zA-Z0-9]{6,}+\|[1-9][a-zA-Z0-9]{8,}+(\|)?$/', $formQRData)) {
            if (strpos($formQRData, '|') === false) {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> $this->sId,
                    'line_id'=> $this->lId,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> $this->prodOrder,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);

                Notification::make()
                    ->title('Invalid QR')
                    ->body("Scan the valid QR code.<br>(Ex: Item_Code|Serial_Number )")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }
            else
            {
                $splits = explode('|', $formQRData);
                $iCode = trim($splits[0]);
                $sNumber = isset($splits[1]) ? trim($splits[1]) : null;

                if (!ctype_alnum($iCode)) {
                    $this->form->fill([
                        'plant_id'=> $this->pId,
                        'block_name'=> $this->bId,
                        'shift_id'=> $this->sId,
                        'line_id'=> $this->lId,
                        'item_id'=> null,
                        'serial_number'=> null,
                        'success_msg'=> null,
                        'production_order'=> $this->prodOrder,
                        'sap_msg_status' => null,
                        'sap_msg_description' => null,
                        'operator_id'=> $operatorName,
                        'recent_qr' => $this->recQr,
                    ]);

                    Notification::make()
                        ->title('Invalid Item Code')
                        ->body("Item code must contain alpha-numeric values only.")
                        ->danger()
                        ->seconds(2)
                        ->send();
                    return;
                }
                else if (strlen($iCode) < 6) {
                    $this->form->fill([
                        'plant_id'=> $this->pId,
                        'block_name'=> $this->bId,
                        'shift_id'=> $this->sId,
                        'line_id'=> $this->lId,
                        'item_id'=> null,
                        'serial_number'=> null,
                        'success_msg'=> null,
                        'production_order'=> $this->prodOrder,
                        'sap_msg_status' => null,
                        'sap_msg_description' => null,
                        'operator_id'=> $operatorName,
                        'recent_qr' => $this->recQr,
                    ]);

                    Notification::make()
                        ->title('Invalid Item Code')
                        ->body("Item code must be at least 6 digits.")
                        ->danger()
                        ->seconds(2)
                        ->send();
                    return;
                }
                else if (!ctype_alnum($sNumber)) {
                    $this->form->fill([
                        'plant_id'=> $this->pId,
                        'block_name'=> $this->bId,
                        'shift_id'=> $this->sId,
                        'line_id'=> $this->lId,
                        'item_id'=> null,
                        'serial_number'=> null,
                        'success_msg'=> null,
                        'production_order'=> $this->prodOrder,
                        'sap_msg_status' => null,
                        'sap_msg_description' => null,
                        'operator_id'=> $operatorName,
                        'recent_qr' => $this->recQr,
                    ]);

                    Notification::make()
                        ->title('Invalid Serial Number')
                        ->body("Serial Number must contain alpha-numeric values only.")
                        ->danger()
                        // ->duration(800)
                        ->seconds(2)
                        ->send();
                    return;
                }
                else if (strlen($sNumber) < 9) {
                    $this->form->fill([
                        'plant_id'=> $this->pId,
                        'block_name'=> $this->bId,
                        'shift_id'=> $this->sId,
                        'line_id'=> $this->lId,
                        'item_id'=> null,
                        'serial_number'=> null,
                        'success_msg'=> null,
                        'production_order'=> $this->prodOrder,
                        'sap_msg_status' => null,
                        'sap_msg_description' => null,
                        'operator_id'=> $operatorName,
                        'recent_qr' => $this->recQr,
                    ]);

                    Notification::make()
                        ->title('Invalid Serial Number')
                        ->body("Serial Number must be at least 9 digits.")
                        ->danger()
                        // ->duration(800)
                        ->seconds(2)
                        ->send();
                    return;
                }
            }

            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $this->recQr,
            ]);

            Notification::make()
                ->title('Invalid QR')
                ->body("Scan the valid QR code.<br>(Ex: Item_Code|Serial_Number )")
                ->danger()
                ->seconds(2)
                ->send();
            return;
        }
        else
        {
            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $this->recQr,
            ]);
        }

        // Only search when all parent IDs are selected
        $parts = explode('|', $formQRData);
        $itemCode = trim($parts[0]);
        $serialNumber = isset($parts[1]) ? trim($parts[1]) : null;

        // Fetch item using item code and plant_id
        $masItem = Item::where('code', $itemCode)->first();
        if (!$masItem)
        {
            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $this->recQr,
            ]);
            Notification::make()
                ->title('Unknown Item Code')
                ->body("Item code does not exist in master data.")
                ->danger()
                ->seconds(2)
                ->send();
            return;
        }

        $item = Item::where('code', $itemCode)
            ->where('plant_id', $this->pId)
            ->first();

        if ($item)
        {
            $sNo = ProductionQuantity::where('serial_number', $serialNumber)->where('plant_id', $this->pId)->exists();
            if (!$sNo)
            {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> $this->sId,
                    'line_id'=> $this->lId,
                    'item_id'=> $item->id,
                    'serial_number'=> null,
                    'success_msg'=> 'Y',
                    'production_order'=> $this->prodOrder,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);
                $this->succId = 'Y';
                $this->iId = $item->id;
            }
            else
            {
                $this->form->fill([
                    'plant_id'=> $this->pId,
                    'block_name'=> $this->bId,
                    'shift_id'=> $this->sId,
                    'line_id'=> $this->lId,
                    'item_id'=> null,
                    'serial_number'=> null,
                    'success_msg'=> null,
                    'production_order'=> $this->prodOrder,
                    'sap_msg_status' => null,
                    'sap_msg_description' => null,
                    'operator_id'=> $operatorName,
                    'recent_qr' => $this->recQr,
                ]);
                Notification::make()
                    ->title('Duplicate Serial Number')
                    ->body("Serial number already exist in database for choosed plant.")
                    ->danger()
                    ->seconds(2)
                    ->send();
                return;
            }
        }
        else
        {
            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $this->recQr,
            ]);

            Notification::make()
                ->title('Unknown Item Code')
                ->body("Item code does not exist in master data for choosed plant.")
                ->danger()
                ->seconds(2)
                ->send();
            return;
        }

        if ($this->succId === null) {
            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $this->recQr,
            ]);

            Notification::make()
            ->title("Invalid QR Found") // {$operatorName}
            ->body("Please, scan the valid QR code.")
            ->danger()
            // ->persistent()
            ->seconds(2)
            ->send();
            return;
        }
        else
        {
            // // Perform any additional processing or database operations
            // $this->saveFormData($formValues);

            $parts = explode('|', $this->qrData);
            $itemCode = trim($parts[0]);
            $this->sNoId = isset($parts[1]) ? trim($parts[1]) : null;

            ProductionQuantity::create([
                'plant_id'=> $this->pId,
                'shift_id'=> $this->sId,
                'line_id' => $this->lId,
                'item_id'=> $this->iId,
                'serial_number' => $this->sNoId,
                'production_order'=> $this->prodOrder,
                'operator_id'=> $operatorName,
            ]);

            // after success insertion
            $this->form->fill([
                'plant_id'=> $this->pId,
                'block_name'=> $this->bId,
                'shift_id'=> $this->sId,
                'line_id'=> $this->lId,
                'item_id'=> null,
                'serial_number'=> null,
                'success_msg'=> null,
                'production_order'=> $this->prodOrder,
                'sap_msg_status' => null,
                'sap_msg_description' => null,
                'operator_id'=> $operatorName,
                'recent_qr' => $itemCode.' | '.$this->sNoId,
            ]);

            Notification::make()
                ->title("Valid QR Found") // {$operatorName}
                ->body("Valid QR code scanned:<br>{$this->qrData}")
                ->success()
                // ->persistent()
                ->duration(600)
                ->send();

            $formQRData = null;
            $this->qrData = null;
        }
    }

    protected function saveFormData($formValues)
    {
        // Save the form data to the database or perform other operations
        // For example:
        $model = ProductionQuantity::create($formValues);

       // dd('Production Updated Event Dispatched');

        $this->dispatch('productionUpdated');

        // // Optionally, you can emit an event or perform a redirect after saving
        // $this->emit('formSaved', $model->id);
    }
}
