<?php

namespace App\Classes\FTN\Process\Echomail;

use Carbon\Carbon;
use Carbon\CarbonInterface;
use Illuminate\Support\Facades\Log;

use App\Classes\FTN\{Message,Process};
use App\Models\{Echoarea,Echomail,Setup};

/**
 * Process messages to Test
 *
 * @package App\Classes\FTN\Process
 */
final class Test extends Process
{
	private const LOGKEY = 'RT-';

	private static array $logo = [
		'Ú¿ÚÄ¿ÚÄ¿Ú¿',
		' ³ ³ÄÙÀÄ¿ ³ ',
		' Á ÀÄÙÀÄÙ Á '
	];

	private const testing = ['test','testing'];

	public static function handle(Message $msg): bool
	{
		if ((strtolower($msg->user_to) !== 'all') || ! in_array(strtolower($msg->subject),self::testing))
			return FALSE;

		Log::info(sprintf('%s:- Processing TEST message from (%s) [%s]',self::LOGKEY,$msg->user_from,$msg->fftn));
		$ftns = Setup::findOrFail(config('app.id'))->system->match($msg->fboss_o->zone)->first();

		$reply = sprintf("Your test was received here on %s and it looks like you sent it on %s. If that is correct, then it took %s to get here.\r",
			Carbon::now()->utc()->toDateTimeString(),
			$msg->date->utc()->toDateTimeString(),
			$msg->date->diffForHumans(['parts'=>3,'syntax'=>CarbonInterface::DIFF_ABSOLUTE])
		);

		$reply .= "\r";
		$reply .= "\r";
		$reply .= "------------------------------ BEING MESSAGE ------------------------------\r";
		$reply .= sprintf("TO: %s\r",$msg->user_to);
		$reply .= sprintf("SUBJECT: %s\r",$msg->subject);
		$reply .= $msg->message."\r";
		$reply .= "------------------------------ CONTROL LINES ------------------------------\r";
		$reply .= sprintf("DATE: %s\r",$msg->date->utc()->format('Y-m-d H:i:s'));
		$reply .= sprintf("MSGID: %s\r",$msg->msgid);

		foreach ($msg->kludge as $k=>$v)
			$reply .= sprintf("@%s: %s\r",strtoupper($k),$v);
		foreach ($msg->via as $via)
			$reply .= sprintf("VIA: %s\r",$via);

		$reply .= "------------------------------  END MESSAGE  ------------------------------\r";

		$eo = Echoarea::where('name',$msg->echoarea)->single();

		$o = new Echomail;
		$o->to = $msg->user_from;
		$o->from = Setup::PRODUCT_NAME;
		$o->subject = 'Test Reply';
		$o->datetime = Carbon::now();
		$o->tzoffset = $o->datetime->utcOffset();
		$o->echoarea_id = $eo?->id;
		$o->reply = $msg->msgid;
		$o->fftn_id = $ftns->id;

		$o->flags = Message::FLAG_LOCAL;
		$o->msg = static::format_msg($reply,self::$logo);
		$o->tagline = 'I ate a clock yesterday, it was very time-consuming.';
		$o->tearline = sprintf('%s (%04X)',Setup::PRODUCT_NAME,Setup::PRODUCT_ID);
		$o->origin = sprintf('%s (%s)',Setup::PRODUCT_NAME,$ftns->ftn4d);
		$o->kludges = collect(['chrs'=>$msg->kludge->get('chrs') ?: 'CP437 2']);
		$o->save();

		return TRUE;
	}
}