<?php

namespace App\Services;

use Cache;
use App\Profile;
use Illuminate\Support\Str;
use Illuminate\Support\Facades\Http;
use App\Util\Webfinger\WebfingerUrl;

class AutolinkService
{
	const CACHE_KEY = 'pf:services:autolink:';

	public static function mentionedUsernameExists($username)
	{
		$key = 'pf:services:autolink:userexists:' . hash('sha256', $username);

		return Cache::remember($key, 3600, function() use($username) {
			$remote = Str::of($username)->contains('@');
			$profile = Profile::whereUsername($username)->first();
			if($profile) {
				if($profile->domain != null) {
					$instance = InstanceService::getByDomain($profile->domain);
					if($instance && $instance->banned == true) {
						return false;
					}
				}
				return true;
			} else {
				if($remote) {
					$parts = explode('@', $username);
					$domain = last($parts);
					$instance = InstanceService::getByDomain($domain);

					if($instance) {
						if($instance->banned == true) {
							return false;
						} else {
							$wf = WebfingerUrl::generateWebfingerUrl($username);
							$res = Http::head($wf);
							return $res->ok();
						}
					} else {
						$wf = WebfingerUrl::generateWebfingerUrl($username);
						$res = Http::head($wf);
						return $res->ok();
					}
				}
			}
			return false;
		});
	}
}