<?php

namespace App\Util\Lexer;

use Illuminate\Support\Str;

class Bearcap
{
    public static function encode($url, $token)
    {
        return "bear:?t={$token}&u={$url}";
    }

    public static function decode($str)
    {
        if (! Str::startsWith($str, 'bear:')) {
            return false;
        }

        $query = parse_url($str, PHP_URL_QUERY);

        if (! $query) {
            return false;
        }

        $res = [];

        $parts = Str::of($str)->substr(6)->explode('&')->toArray();

        foreach ($parts as $part) {
            if (Str::startsWith($part, 't=')) {
                $res['token'] = substr($part, 2);
            }

            if (Str::startsWith($part, 'u=')) {
                $res['url'] = substr($part, 2);
            }
        }

        if (! isset($res['token']) ||
            ! isset($res['url'])
        ) {
            return false;
        }

        $url = $res['url'];
        if (mb_substr($url, 0, 8) !== 'https://') {
            return false;
        }
        $valid = filter_var($url, FILTER_VALIDATE_URL);
        if (! $valid) {
            return false;
        }

        return $res;
    }
}
