<?php

namespace Functional\Streaks\Notifications;

use Illuminate\Notifications\Notification;
use NotificationChannels\WebPush\WebPushChannel;
use NotificationChannels\WebPush\WebPushMessage;

/**
 * Rappel « ta série est en danger » — push envoyé le soir si l'utilisateur n'a pas encore
 * entraîné aujourd'hui alors que sa série est vivante. Textes localisés selon la locale du user.
 */
class StreakAtRiskNotification extends Notification
{
    public function __construct(private readonly int $currentCount)
    {
    }

    /** @return array<int,string> */
    public function via(object $notifiable): array
    {
        return [WebPushChannel::class];
    }

    public function toWebPush(object $notifiable): WebPushMessage
    {
        $locale = $notifiable->locale ?? 'fr';
        $n = $this->currentCount;

        [$title, $body] = match ($locale) {
            'en' => ["🔥 Your {$n}-day streak!", 'Train today so you don\'t lose it.'],
            'pt-BR' => ["🔥 Sua sequência de {$n} dias!", 'Treine hoje para não perdê-la.'],
            default => ["🔥 Ta série de {$n} jours !", 'Entraîne-toi aujourd\'hui pour ne pas la perdre.'],
        };

        return (new WebPushMessage())
            ->title($title)
            ->body($body)
            ->icon('/pwa-192.png')
            ->badge('/pwa-192.png')
            ->data(['url' => '/'])
            ->options(['TTL' => 12 * 3600, 'urgency' => 'high']);
    }
}
