import { existsSync, readFileSync } from "node:fs";
import { resolvezmeelConfigPath, resolvezmeelEnvPath } from "./paths.js";
import { parse as parseEnvFileContents } from "dotenv";
const ansi = {
    reset: "\x1b[0m",
    bold: "\x1b[1m",
    dim: "\x1b[2m",
    cyan: "\x1b[36m",
    green: "\x1b[32m",
    yellow: "\x1b[33m",
    magenta: "\x1b[35m",
    blue: "\x1b[34m",
};
function color(text, c) {
    return `${ansi[c]}${text}${ansi.reset}`;
}
function row(label, value) {
    return `${color(label.padEnd(16), "dim")} ${value}`;
}
function redactConnectionString(raw) {
    try {
        const u = new URL(raw);
        const user = u.username || "user";
        const auth = `${user}:***@`;
        return `${u.protocol}//${auth}${u.host}${u.pathname}`;
    }
    catch {
        return "<invalid DATABASE_URL>";
    }
}
function resolveAgentJwtSecretStatus(envFilePath) {
    const envValue = process.env.ZMEEL_AGENT_JWT_SECRET?.trim();
    if (envValue) {
        return {
            status: "pass",
            message: "set",
        };
    }
    if (existsSync(envFilePath)) {
        const parsed = parseEnvFileContents(readFileSync(envFilePath, "utf-8"));
        const fileValue = typeof parsed.ZMEEL_AGENT_JWT_SECRET === "string" ? parsed.ZMEEL_AGENT_JWT_SECRET.trim() : "";
        if (fileValue) {
            return {
                status: "warn",
                message: `found in ${envFilePath} but not loaded`,
            };
        }
    }
    return {
        status: "warn",
        message: "missing (run `pnpm zmeel onboard`)",
    };
}
export function printStartupBanner(opts) {
    const baseHost = opts.host === "0.0.0.0" ? "localhost" : opts.host;
    const baseUrl = `http://${baseHost}:${opts.listenPort}`;
    const apiUrl = `${baseUrl}/api`;
    const uiUrl = opts.uiMode === "none" ? "disabled" : baseUrl;
    const configPath = resolvezmeelConfigPath();
    const envFilePath = resolvezmeelEnvPath();
    const agentJwtSecret = resolveAgentJwtSecretStatus(envFilePath);
    const dbMode = opts.db.mode === "embedded-postgres"
        ? color("embedded-postgres", "green")
        : color("external-postgres", "yellow");
    const uiMode = opts.uiMode === "vite-dev"
        ? color("vite-dev-middleware", "cyan")
        : opts.uiMode === "static"
            ? color("static-ui", "magenta")
            : color("headless-api", "yellow");
    const portValue = opts.requestedPort === opts.listenPort
        ? `${opts.listenPort}`
        : `${opts.listenPort} ${color(`(requested ${opts.requestedPort})`, "dim")}`;
    const dbDetails = opts.db.mode === "embedded-postgres"
        ? `${opts.db.dataDir} ${color(`(pg:${opts.db.port})`, "dim")}`
        : redactConnectionString(opts.db.connectionString);
    const heartbeat = opts.heartbeatSchedulerEnabled
        ? `enabled ${color(`(${opts.heartbeatSchedulerIntervalMs}ms)`, "dim")}`
        : color("disabled", "yellow");
    const dbBackup = opts.databaseBackupEnabled
        ? `enabled ${color(`(every ${opts.databaseBackupIntervalMinutes}m, keep ${opts.databaseBackupRetentionDays}d)`, "dim")}`
        : color("disabled", "yellow");
    const art = [
        color("███████╗███╗   ███╗███████╗███████╗██╗     ", "cyan"),
        color("╚══███╔╝████╗ ████║██╔════╝██╔════╝██║     ", "cyan"),
        color("  ███╔╝ ██╔████╔██║█████╗  █████╗  ██║     ", "cyan"),
        color(" ███╔╝  ██║╚██╔╝██║██╔══╝  ██╔══╝  ██║     ", "cyan"),
        color("███████╗██║ ╚═╝ ██║███████╗███████╗███████╗", "cyan"),
        color("╚══════╝╚═╝     ╚═╝╚══════╝╚══════╝╚══════╝", "cyan"),
    ];
    const lines = [
        "",
        ...art,
        color("  ───────────────────────────────────────────────────────", "blue"),
        row("Mode", `${dbMode}  |  ${uiMode}`),
        row("Deploy", `${opts.deploymentMode} (${opts.deploymentExposure})`),
        row("Auth", opts.authReady ? color("ready", "green") : color("not-ready", "yellow")),
        row("Server", portValue),
        row("API", `${apiUrl} ${color(`(health: ${apiUrl}/health)`, "dim")}`),
        row("UI", uiUrl),
        row("Database", dbDetails),
        row("Migrations", opts.migrationSummary),
        row("Agent JWT", agentJwtSecret.status === "pass"
            ? color(agentJwtSecret.message, "green")
            : color(agentJwtSecret.message, "yellow")),
        row("Heartbeat", heartbeat),
        row("DB Backup", dbBackup),
        row("Backup Dir", opts.databaseBackupDir),
        row("Config", configPath),
        agentJwtSecret.status === "warn"
            ? color("  ───────────────────────────────────────────────────────", "yellow")
            : null,
        color("  ───────────────────────────────────────────────────────", "blue"),
        "",
    ];
    console.log(lines.filter((line) => line !== null).join("\n"));
}
//# sourceMappingURL=startup-banner.js.map