<?php

namespace App\Filament\Resources\RfqTransporterBidResource\Pages;

use App\Filament\Resources\RfqTransporterBidResource;
use App\Models\RfqTransporterBid;
use App\Models\User;
use App\Notifications\PushAlertNotification;
use Filament\Actions;
use Filament\Facades\Filament;
use Filament\Notifications\Notification;
use Filament\Resources\Pages\EditRecord;

class EditRfqTransporterBid extends EditRecord
{
    protected static string $resource = RfqTransporterBidResource::class;

    protected function afterSave(): void
    {
        if (! $this->record->wasChanged('total_freight_charge')) {
            return;
        }

        //  dd($this->record);

        $rank = RfqTransporterBid::where('request_quotation_id', $this->record->request_quotation_id)
            ->orderBy('total_freight_charge')
            ->pluck('id')
            ->search($this->record->id) + 1;

        $recipients = User::role(['Super Admin', 'Rfq Supervisor', 'TransporterBid Employee'])->get();

        $recipients1 = User::role(['Super Admin', 'Rfq Supervisor', 'TransporterBid Employee'])->whereHas('pushSubscriptions')->get();

        $currentUser = Filament::auth()->user();


        if ($currentUser && ! $recipients->contains('id', $currentUser->id)) {
            $recipients->push($currentUser);
        }

        // $user1 = Filament::auth()->user();


        $body = "{$currentUser->name} current rank is #{$rank}";

        Notification::make()
            ->title('Rank Updated')
            ->body("{$currentUser->name} current rank is #{$rank}")
            ->success()
            ->sendToDatabase($recipients);

            \Log::info('Notification sent', [
            'rank' => $rank,
            'recipients' => $recipients->pluck('id'),
        ]);

        foreach ($recipients1 as $user) {
            $user->notify(
                new PushAlertNotification(
                    'Rank Updated',
                    $body
                )
            );

            // $subscriptions = $user->pushSubscriptions;

            // dd($subscriptions);

            // foreach ($subscriptions as $sub) {
            //     $sub->notify(
            //         new PushAlertNotification(
            //             'Rank Updated',
            //             $body
            //         )
            //     );
            // }
        }


    }

    protected function getHeaderActions(): array
    {
        return [
            Actions\ViewAction::make(),
            Actions\DeleteAction::make(),
            Actions\ForceDeleteAction::make(),
            Actions\RestoreAction::make(),
        ];
    }
}
