<?php

namespace App\Notifications\Emails;

use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Support\Facades\Log;

use App\Models\Address;

class NodeMarkedHold extends Notification //implements ShouldQueue
{
	use Queueable;

	private const LOGKEY = 'NEH';

	/**
	 * Create a new notification instance.
	 */
	public function __construct(private Address $ao)
	{
	}

	/**
	 * Get the notification's delivery channels.
	 *
	 * @return array<int, string>
	 */
	public function via(object $notifiable): array
	{
		return ['mail'];
	}

	/**
	 * Get the mail representation of the notification.
	 */
	public function toMail(object $notifiable): MailMessage
	{
		Log::info(sprintf('%s:+ Sending a NODE MARKED HOLD EMAIL for address [%s]',self::LOGKEY,$this->ao->ftn));

		$now = Carbon::now();

		return (new MailMessage)
			->cc(our_address($this->ao)->system->users->first()->email)
			->subject('Your system has been marked HOLD')
			->line(sprintf('Your system has been marked **HOLD**, because it hasnt polled **%s** with address %s since **%s** (%d days).',
				$this->ao->zone->domain->name,
				$this->ao->ftn4d,
				$this->ao->system->last_seen?->format('Y-m-d') ?: 'Not seen',
				$this->ao->system->last_seen?->diffInDays($now)))
			->line('')
			->line('You have (waiting for collection):')
			->line(sprintf('* %s Netmails',number_format($this->ao->netmailWaiting()->count())))
			->line(sprintf('* %s Echomails',number_format($this->ao->echomailWaiting()->count())))
			->line(sprintf('* %s Files',number_format($this->ao->filesWaiting()->count())))
			->line('')
			->line(sprintf('To clear this status, all you need to do make sure your system polls and collects mail by **%s**',($this->ao->system->last_seen ?: Carbon::now())->addDays(config('fido.idle.down'))->format('Y-m-d')))
			->line('If you think you\'ve received this email by mistake or need help, please let me know.');
	}
}