<?php

namespace App\Notifications;

use App\Models\Resignation;
use Illuminate\Support\Str;

class ResignationSubmittedNotification extends HrmsNotification
{
    public function __construct(
        public Resignation $resignation
    ) {}

    public function notificationCategory(): string
    {
        return 'resignation';
    }

    public function notificationSubject(): string
    {
        $name = $this->resignation->user?->name ?? 'An employee';

        return 'Resignation submitted — ' . $name;
    }

    public function notificationLines(): array
    {
        $user = $this->resignation->user;

        return [
            ($user?->name ?? 'An employee') . ' has a resignation on record.',
            'Resignation date: ' . $this->resignation->resignation_date?->format('d M Y'),
            'Last working day: ' . ($this->resignation->last_working_date?->format('d M Y') ?? 'Not set'),
            'Reason: ' . Str::limit((string) ($this->resignation->reason ?? '—'), 120),
        ];
    }

    public function actionUrl(): ?string
    {
        return route('resignations.index', ['status' => 'pending']);
    }

    public function actionLabel(): string
    {
        return 'Review resignations';
    }

    public function toArray(object $notifiable): array
    {
        $user = $this->resignation->user;

        return [
            'type' => 'resignation_submitted',
            'message' => ($user?->name ?? 'An employee') . ' submitted a resignation.',
            'resignation_id' => $this->resignation->id,
            'employee_name' => $user?->name,
            'resignation_date' => $this->resignation->resignation_date?->format('Y-m-d'),
            'last_working_date' => $this->resignation->last_working_date?->format('Y-m-d'),
            'url' => route('resignations.index'),
        ];
    }
}
