<?php

namespace App\Filament\Resources\VisitorEntryResource\Pages;

use App\Filament\Resources\VisitorEntryResource;
use App\Models\EmployeeMaster;
use App\Models\VisitorEntry;
use Filament\Actions;
use Filament\Resources\Pages\CreateRecord;
use Livewire\Attributes\On;
use Storage;

class CreateVisitorEntry extends CreateRecord
{
    protected static string $resource = VisitorEntryResource::class;

    public $capturedPhoto;

    // #[On('photo-captured')]
    // public function handlePhotoCapture(string $photo): void
    // {
    //     // Puts the Base64 photo into the form's data array
    //     $this->data['photo'] = $photo;
    // }

    public function processMobile($mobile)
    {
        $visitor = VisitorEntry::where('mobile_number', $mobile)->latest()->first();

        if ($visitor) {

            $employee = EmployeeMaster::where('id', $visitor->employee_master_id)->first();

            $this->form->fill([
                'mobile_number' => $mobile ?? '',
                'name'       => $visitor->name ?? '',
                'company' => $visitor->company ?? '',
                'type'       => $visitor->type ?? '',
                'department'    => $employee->department ?? '',
                'employee_master_id' => $visitor->employee_master_id->name ?? '',
                'code' => $employee->code ?? '',
            ]);
        }
        else {

            $this->form->fill([
                'mobile_number' => $mobile ?? '',
                'name'       => $visitor->name ?? '',
                'company' => $visitor->company ?? '',
                'type'       => $visitor->type ?? '',
                'department'    => $employee->department ?? '',
                'employee_master_id' => $visitor->employee_master_id->name ?? '',
                'code' => $employee->code ?? '',
            ]);
        }
    }

    // protected function mutateFormDataBeforeCreate(array $data): array
    // {
    //     if (
    //         !empty($data['photo']) &&
    //         str_starts_with($data['photo'], 'data:image')
    //     ) {
    //         // Step A: Strip the "data:image/jpeg;base64," prefix
    //         $imageData = explode(',', $data['photo'])[1];

    //         // Step B: Generate a unique filename
    //         $filename = 'visitor_' . time() . '_' . uniqid() . '.jpg';

    //         // Step C: Decode Base64 and save as a real .jpg file
    //         $path = 'visitor-photos/' . $filename;
    //         Storage::disk('public')->put($path, base64_decode($imageData));

    //         // Step D: Replace the Base64 string with just the file path
    //         $data['photo'] = $path;
    //     }

    //     return $data;
    // }

        #[On('photo-captured')]
        public function handlePhotoCapture(string $photo): void
        {
            $this->data['photo'] = $photo;
            \Log::info('WEBCAM: photo-captured event received, length: ' . strlen($photo));
        }

        // protected function mutateFormDataBeforeCreate(array $data): array
        // {
        //     \Log::info('WEBCAM: mutateFormDataBeforeCreate called, photo value: ' . substr($data['photo'] ?? 'NULL', 0, 50));

        //     if (
        //         !empty($data['photo']) &&
        //         str_starts_with($data['photo'], 'data:image')
        //     ) {
        //         $imageData = explode(',', $data['photo'])[1];
        //         $filename  = 'visitor_' . time() . '_' . uniqid() . '.jpg';
        //         $path      = 'visitor-photos/' . $filename;
        //         Storage::disk('public')->put($path, base64_decode($imageData));
        //         $data['photo'] = $path;

        //         \Log::info('WEBCAM: photo saved to ' . $path);
        //     }

        //     return $data;
        // }

        protected function mutateFormDataBeforeCreate(array $data): array
        {
            if (
                !empty($data['photo']) &&
                str_starts_with($data['photo'], 'data:image')
            ) {
                try {
                    $imageData = explode(',', $data['photo'])[1];

                    $filename = 'visitor_' . time() . '_' . uniqid() . '.jpg';

                    $path = 'visitor-photos/' . $filename;

                    $decoded = base64_decode($imageData);

                    $saved = Storage::disk('public')->put($path, $decoded);

                    \Log::info('PHOTO UPLOAD (PUBLIC):', [
                        'filename' => $filename,
                        'path' => $path,
                        'size_bytes' => strlen($decoded),
                        'saved' => $saved ? 'SUCCESS' : 'FAILED',
                    ]);

                    $data['photo'] = $path;

                } catch (\Exception $e) {
                    \Log::error('PHOTO UPLOAD ERROR: ' . $e->getMessage());
                }
            }

            return $data;
        }


        public function setPhoto(string $photo): void
        {
            $this->capturedPhoto = $photo;

            // Change this ↓ to dispatch to parent explicitly
            $this->dispatch('photo-captured', photo: $photo)->to(\App\Filament\Resources\VisitorEntryResource\Pages\CreateVisitorEntry::class);
        }
}
