<?php

namespace App\Filament\Resources\ProductionOrderResource\Pages;

use App\Filament\Resources\ProductionOrderResource;
use App\Models\Item;
use App\Models\Plant;
use App\Models\ProductionOrder;
use Filament\Actions;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\ViewRecord;

class ViewProductionOrder extends ViewRecord
{
    protected static string $resource = ProductionOrderResource::class;

    public function printProductionOrder()
    {
        $pOrder = trim($this->form->getState()['production_order'] ?? '') ?? null;

        $plantId = trim($this->form->getState()['plant_id'] ?? '') ?? null;

        if (empty($plantId)) {
            Notification::make()
                ->title('Plant name cannot be empty!')
                ->danger()
                ->send();

            return;
        } elseif (empty($pOrder)) {
            Notification::make()
                ->title('Production order cannot be empty!')
                ->danger()
                ->send();

            return;
        }

        $pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();

        if (! $pOrderExists) {
            Notification::make()
                ->title("Production Order '{$pOrder}' does not exist to get print!")
                ->danger()
                ->send();

            return;
        } else {
            return redirect()->route('production-orders.print', ['production_order' => $pOrder]);
        }
    }

    public function printPanel()
    {
        $plantId = $this->form->getState()['plant_id'] ?? null;
        $plantId = filled($plantId) ? (int) $plantId : null;

        $pOrder = $this->form->getState()['production_order'] ?? null;
        $pOrder = filled($pOrder) ? trim($pOrder) : null;

        $plantCode = Plant::where('id', $plantId)->value('code');

        if (empty($plantId)) {
            Notification::make()
                ->title('Plant name cannot be empty!')
                ->danger()
                ->send();

            return;
        } elseif (empty($pOrder)) {
            Notification::make()
                ->title('Production order cannot be empty!')
                ->danger()
                ->send();
            return;
        }

        $pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();

        if (! $pOrderExists) {
            Notification::make()
                ->title("Production Order '{$pOrder}' does not exist to get print!")
                ->danger()
                ->send();

            return;
        } else {
            return redirect()->route('production-orders.printpanel', ['production_order' => $pOrder, 'plant_code' => $plantCode]);
        }

    }

    // public function printItemSerial()
    // {
    //     $pOrder = trim($this->form->getState()['production_order'] ?? '') ?? null;

    //     $plantId = trim($this->form->getState()['plant_id'] ?? '') ?? null;

    //     $plantCode = Plant::where('id', $plantId)->value('code');

    //     if (empty($plantId)) {
    //         Notification::make()
    //             ->title('Plant name cannot be empty!')
    //             ->danger()
    //             ->send();
    //         return;
    //     } elseif (empty($pOrder)) {
    //         Notification::make()
    //             ->title('Production order cannot be empty!')
    //             ->danger()
    //             ->send();
    //         return;
    //     }

    //     $pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();

    //     if (! $pOrderExists) {
    //         Notification::make()
    //             ->title("Production Order '{$pOrder}' does not exist to get print!")
    //             ->danger()
    //             ->send();
    //         return;
    //     } else {
    //         return redirect()->route('production-orders.printItemSerial', ['production_order' => $pOrder, 'plant_code' => $plantCode]);
    //     }
    // }

    public function printItemSerial()
    {
        $pOrder = trim($this->form->getState()['production_order'] ?? '') ?? null;

        $plantId = trim($this->form->getState()['plant_id'] ?? '') ?? null;

        $plantCode = Plant::where('id', $plantId)->value('code');

        if (empty($plantId)) {
            Notification::make()
                ->title('Plant name cannot be empty!')
                ->danger()
                ->send();
            return;
        } elseif (empty($pOrder)) {
            Notification::make()
                ->title('Production order cannot be empty!')
                ->danger()
                ->send();
            return;
        }

        $pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();

        if (! $pOrderExists) {
            Notification::make()
                ->title("Production Order '{$pOrder}' does not exist to get print!")
                ->danger()
                ->send();
            return;
        } else {
            return redirect()->route('production-orders.printItemSerial', ['production_order' => $pOrder, 'plant_code' => $plantCode]);
        }
    }

    public function exportSerialNo(){
        $pOrder = trim($this->form->getState()['production_order'] ?? '') ?? null;

        $plantId = trim($this->form->getState()['plant_id'] ?? '') ?? null;

        $itemId = trim($this->form->getState()['item_id'] ?? '') ?? null;

        $fromSerNo = trim($this->form->getState()['from_serial_number'] ?? '') ?? null;

        $toSerNo = trim($this->form->getState()['to_serial_number'] ?? '') ?? null;

        $plantCode = Plant::where('id', $plantId)->value('code');

        // $itemCode = Item::where('id', $itemId)->value('code');

        if (empty($plantId)) {
            Notification::make()
                ->title('Plant name cannot be empty!')
                ->danger()
                ->send();

            return;
        } elseif (empty($pOrder)) {
            Notification::make()
                ->title('Production order cannot be empty!')
                ->danger()
                ->send();
            return;
        }
        elseif (empty($fromSerNo)) {
            Notification::make()
                ->title('From serial number cannot be empty!')
                ->danger()
                ->send();
            return;
        }
        elseif (empty($toSerNo)) {
            Notification::make()
                ->title('To serial number cannot be empty!')
                ->danger()
                ->send();
            return;
        }

        $pOrderExists = ProductionOrder::where('plant_id', $plantId)->where('production_order', $pOrder)->first();

        if (! $pOrderExists) {
            Notification::make()
                ->title("Production Order '{$pOrder}' does not exist to get print!")
                ->danger()
                ->send();

            return;
        } else {
            return redirect()->route('production-orders.exportSerial', ['production_order' => $pOrder, 'plant_code' => $plantCode, 'from_serial_no' => $fromSerNo, 'to_serial_no' => $toSerNo]);
        }
    }

    protected function getHeaderActions(): array
    {
        return [
            Actions\EditAction::make(),
        ];
    }
}
