<?php

namespace App\Support;

use App\Models\User;
use App\Notifications\GeneralNotification;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Notification;

/**
 * ارسال متمرکز اطلاع‌رسانی‌ها (ایمیل + پنل) به مدیران و کارمندان.
 */
class Notifier
{
    /** کاربران مدیر (مدیر کل و مدیر فروش). */
    public static function managers(): Collection
    {
        return User::where('is_active', true)
            ->whereHas('roles', fn ($q) => $q->whereIn('name', ['admin', 'sales_manager']))
            ->get();
    }

    /** ارسال به همه‌ی مدیران. */
    public static function toManagers(string $title, string $body, ?string $url = null, string $icon = 'heroicon-o-bell', string $color = 'info'): void
    {
        $managers = static::managers();
        if ($managers->isNotEmpty()) {
            Notification::send($managers, new GeneralNotification($title, $body, $url, $icon, $color));
        }
    }

    /** ارسال به مجموعه‌ای از کاربران. */
    public static function toUsers($users, string $title, string $body, ?string $url = null, string $icon = 'heroicon-o-bell', string $color = 'info'): void
    {
        $users = $users instanceof Collection ? $users : collect($users)->filter();
        $users = $users->filter(fn ($u) => $u instanceof User);
        if ($users->isNotEmpty()) {
            Notification::send($users, new GeneralNotification($title, $body, $url, $icon, $color));
        }
    }

    /** ارسال به یک کاربر. */
    public static function toUser(?User $user, string $title, string $body, ?string $url = null, string $icon = 'heroicon-o-bell', string $color = 'info'): void
    {
        if ($user) {
            $user->notify(new GeneralNotification($title, $body, $url, $icon, $color));
        }
    }
}
