<?php

namespace App\Notifications\Push;

use App\Enums\PushNotificationCategoryEnum;
use App\Enums\PushNotificationTargetEnum;
use Illuminate\Database\Eloquent\Collection;

abstract class BasePushNotification
{
    abstract public function label(): string;

    abstract public function title(): string;

    abstract public function body(): string;

    abstract public function target(): PushNotificationTargetEnum;

    abstract public function category(): PushNotificationCategoryEnum;

    /**
     * Retorna os usuários elegíveis para receber esta notificação agora.
     * Não aplica cooldown — isso é responsabilidade do PushNotificationDispatcher.
     */
    abstract public function eligibleUsers(): Collection;

    /**
     * Cooldown em dias para esta notificação específica (nível de msg).
     */
    public function notificationCooldownDays(): int
    {
        return 28;
    }

    /**
     * Cooldown em dias para a categoria desta notificação (nível de categoria).
     * Retorne 0 para desabilitar o cooldown de categoria.
     */
    public function categoryCooldownDays(): int
    {
        return 7;
    }
}
