"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.MIN_AUTO_WEBUI_PORT = exports.DEFAULT_WEBUI_PORT = void 0;
exports.parseWebuiPortSpec = parseWebuiPortSpec;
exports.validateWebuiPort = validateWebuiPort;
exports.buildWebuiPortCandidates = buildWebuiPortCandidates;
exports.formatWebuiPortScanBound = formatWebuiPortScanBound;
exports.DEFAULT_WEBUI_PORT = 5666;
exports.MIN_AUTO_WEBUI_PORT = 1024;
function parseWebuiPortSpec(raw) {
    let numericText = raw;
    let strictPort = true;
    let portAutoDirection = 'down';
    if (raw.endsWith('+')) {
        numericText = raw.slice(0, -1);
        strictPort = false;
        portAutoDirection = 'up';
    }
    else if (raw.endsWith('-')) {
        numericText = raw.slice(0, -1);
        strictPort = false;
        portAutoDirection = 'down';
    }
    if (!/^[0-9]+$/.test(numericText))
        return null;
    const port = Number(numericText);
    if (!Number.isInteger(port) || port < 1 || port > 65535)
        return null;
    return { port, strictPort, portAutoDirection };
}
function validateWebuiPort(port, context) {
    if (!Number.isInteger(port) || port < 0 || port > 65535) {
        throw new Error(`${context} must be an integer in [0, 65535] (got ${String(port)})`);
    }
}
function buildWebuiPortCandidates(params) {
    validateWebuiPort(params.preferredPort, 'WebUI port');
    if (params.strictPort || params.preferredPort === 0)
        return [params.preferredPort];
    const candidates = [params.preferredPort];
    if (params.direction === 'down') {
        for (let candidate = params.preferredPort - 1; candidate >= exports.MIN_AUTO_WEBUI_PORT; candidate -= 1) {
            candidates.push(candidate);
        }
    }
    else {
        for (let candidate = params.preferredPort + 1; candidate <= 65535; candidate += 1) {
            candidates.push(candidate);
        }
    }
    return candidates;
}
function formatWebuiPortScanBound(params) {
    return params.direction === 'down'
        ? `down to ${Math.min(params.preferredPort, exports.MIN_AUTO_WEBUI_PORT)}`
        : 'up to 65535';
}
