<?php

declare(strict_types=1);

namespace app\common\service;

use app\admin\model\Domain as DomainModel;

/**
 * 平台分配域名解析（支持多域名，一行一个）
 */
class SplitPlatformDomainService
{
    /**
     * 解析配置文本为合法根域名列表（去重、小写）
     *
     * @param string $raw 换行或逗号分隔的域名文本
     * @return array<int, string>
     */
    public static function parseList(string $raw): array
    {
        $raw = trim($raw);
        if ($raw === '') {
            return [];
        }

        $parts = preg_split('/[\r\n,]+/', $raw) ?: [];
        $domains = [];
        foreach ($parts as $part) {
            $domain = DomainModel::normalizeDomain(trim((string) $part));
            if ($domain === '' || isset($domains[$domain])) {
                continue;
            }
            if (!DomainModel::isValidRootDomain($domain)) {
                continue;
            }
            $domains[$domain] = $domain;
        }

        return array_values($domains);
    }

    /**
     * 将域名列表格式化为配置存储文本（一行一个）
     *
     * @param array<int, string> $domains
     */
    public static function formatList(array $domains): string
    {
        $lines = [];
        foreach ($domains as $domain) {
            $domain = DomainModel::normalizeDomain((string) $domain);
            if ($domain !== '' && DomainModel::isValidRootDomain($domain)) {
                $lines[$domain] = $domain;
            }
        }
        return implode("\n", array_values($lines));
    }
}
