<?php

declare(strict_types=1);

namespace app\common\library\scrm;

/**
 * 火箭云控 URL 解析：短链（s.url99.me/code）与长链（*.url66.me/gds?link=）动态识别
 *
 * 长链域名可能为 v3.url66.me、v4.url66.me 等，禁止写死单一 host。
 */
final class HuojianUrlHelper
{
    /** 火箭业务页路径特征 */
    public const BUSINESS_PATH_NEEDLE = '/gds';

    /** 长链 query 中的分享 token 参数名 */
    public const LINK_QUERY_PARAM = 'link';

    /**
     * 是否为火箭长链业务页（含 /gds 且带 link=）
     */
    public static function isLongLinkUrl(string $pageUrl): bool
    {
        $path = (string) parse_url($pageUrl, PHP_URL_PATH);
        if ($path === '' || strpos($path, self::BUSINESS_PATH_NEEDLE) === false) {
            return false;
        }

        $query = [];
        parse_str((string) parse_url($pageUrl, PHP_URL_QUERY), $query);

        return trim((string) ($query[self::LINK_QUERY_PARAM] ?? '')) !== '';
    }

    /**
     * 从长链 URL 动态解析业务域（如 v3.url66.me）
     */
    public static function extractBusinessHost(string $pageUrl): string
    {
        if (!self::isLongLinkUrl($pageUrl)) {
            return '';
        }

        $host = strtolower(trim((string) parse_url($pageUrl, PHP_URL_HOST)));

        return $host !== '' ? $host : '';
    }

    /**
     * 提取分享稳定标识：长链 link= 或短链 path 段（如 50q3622j）
     */
    public static function extractShareToken(string $pageUrl): string
    {
        if (self::isLongLinkUrl($pageUrl)) {
            $query = [];
            parse_str((string) parse_url($pageUrl, PHP_URL_QUERY), $query);

            return trim((string) ($query[self::LINK_QUERY_PARAM] ?? ''));
        }

        $path = trim((string) parse_url($pageUrl, PHP_URL_PATH), '/');
        if ($path === '' || strpos($path, '/') !== false) {
            return '';
        }

        if (preg_match('/^[a-zA-Z0-9]+$/', $path) !== 1) {
            return '';
        }

        return $path;
    }

    /**
     * 是否为火箭短链入口（单段 path，非 /gds 长链）
     */
    public static function isShortEntryUrl(string $pageUrl): bool
    {
        if (self::isLongLinkUrl($pageUrl)) {
            return false;
        }

        return self::extractShareToken($pageUrl) !== '';
    }

    /**
     * 会话 scope：长链用动态业务域；短链用 share.{token}（跨长链域名复用 cookie jar）
     */
    public static function resolveSessionScope(string $pageUrl): string
    {
        $businessHost = self::extractBusinessHost($pageUrl);
        if ($businessHost !== '') {
            return $businessHost;
        }

        $token = self::extractShareToken($pageUrl);
        if ($token !== '') {
            return 'share.' . $token;
        }

        return '';
    }
}
