<?php

namespace App\Notifications;

use Carbon\Carbon;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Notification;

use App\Classes\FTN\Message;
use App\Models\{Netmail,Setup,System};

abstract class Netmails extends Notification //implements ShouldQueue
{
	use Queueable;

	protected const via = 'netmail';

	private const LOGKEY = 'NN-';

	/**
	 * Create a new notification instance.
	 */
	public function __construct()
	{
		$this->queue = 'netmail';
	}

	/**
	 * Get the notification's delivery channels.
	 *
	 * @param mixed $notifiable
	 * @return array
	 * @todo change to object $notifiable
	 */
	public function via($notifiable)
	{
		return [ self::via ];
	}

	/**
	 * Get the mail representation of the notification.
	 *
	 * @param mixed $notifiable
	 * @return Netmail
	 * @throws \Exception
	 */
	abstract public function toNetmail(object $notifiable): Netmail;

	protected function setupNetmail(object $notifiable): Netmail
	{
		// @todo Redirect netmails to Hubs or higher to the admin
		$ao = $notifiable->routeNotificationFor(static::via);

		$o = new Netmail;
		$o->to = $ao->system->sysop;
		$o->from = Setup::PRODUCT_NAME;

		$o->datetime = Carbon::now();
		$o->tzoffset = $o->datetime->utcOffset();

		$o->fftn_id = our_address($ao)->id;
		$o->tftn_id = $ao->id;
		$o->flags = (Message::FLAG_LOCAL|Message::FLAG_PRIVATE);
		$o->cost = 0;

		$o->tearline = sprintf('%s (%04X)',Setup::PRODUCT_NAME,Setup::PRODUCT_ID);

		return $o;
	}
}