<?php

namespace App\Filament\Resources\Publication\Announcements\Pages;

use App\Enums\AnnouncementType;
use App\Filament\Actions\Cheerful\CreateAction;
use App\Filament\Resources\Publication\Announcements\AnnouncementResource;
use App\Models\Company;
use App\Models\PartnerMedia;
use App\Models\User;
use App\Notifications\BroadcastNotification;
use Filament\Resources\Pages\ManageRecords;
use Filament\Support\Enums\Width;

class ManageAnnouncements extends ManageRecords
{
    protected static string $resource = AnnouncementResource::class;

    protected static ?string $title = 'Pengumuman';

    protected function getHeaderActions(): array
    {
        return [
            CreateAction::make()
                ->label('Tambah')
                ->modalHeading('Tambah Pengumuman')
                ->modalSubmitActionLabel('Simpan')
                ->modalCancelActionLabel('Batal')
                ->extraModalFooterActions(fn (CreateAction $action): array => [
                    $action->makeModalSubmitAction('createAnother', arguments: ['another' => true])
                        ->label('Simpan dan Tambah Lagi'),
                ])
                ->modalWidth(Width::FiveExtraLarge)
                ->after(function (array $data) {
                    if ($data['type'] === AnnouncementType::PUBLIC) {
                        return;
                    }

                    $payload = [
                        'title' => $data['title'],
                        'body' => $data['content'],
                    ];

                    $userIds = Company::whereIn(
                        'id',
                        PartnerMedia::whereIn('id', $data['partnerMedia'])->pluck('company_id')
                    )->pluck('user_id');

                    User::whereIn('id', $userIds)->each(function ($user) use ($payload) {
                        $user->notify(new BroadcastNotification($payload));
                    });
                }),
        ];
    }
}
