<?php

namespace App\Services;

use App\Models\ProfessionalPayout;
use App\Models\UserNotification;

class PayoutPushNotificationService
{
    public function __construct(private readonly FirebaseCloudMessagingService $messaging) {}

    public function send(ProfessionalPayout $payout): bool
    {
        $payout->loadMissing('professional.user');
        $user = $payout->professional?->user;
        if (! $user) {
            return false;
        }

        $title = 'Payout disbursed';
        $body = 'Your payout of ₱'.number_format((float) $payout->amount, 2)
            .' has been released'.($payout->reference ? " ({$payout->reference})." : '.');
        $data = [
            'type' => 'payout_disbursed',
            'payout_id' => (string) $payout->id,
            'recipient_role' => 'professional',
            'audience' => 'professional',
        ];

        if ($user->pushTokens()->exists() || filled($user->push_token)) {
            return $this->messaging->sendToUser($user, $title, $body, $data);
        }

        UserNotification::create([
            'user_id' => $user->id,
            'title' => $title,
            'body' => $body,
            'data' => $data,
        ]);

        return false;
    }
}
