package com.easyagents.federation.sql.source;

import java.io.Serializable;

/**
 * 不含敏感信息的数据库与驱动运行指纹。
 *
 * @param databaseProduct 数据库产品名
 * @param databaseVersion 数据库版本
 * @param driverName 驱动名
 * @param driverVersion 驱动版本
 * @param adapterVersion Adapter 版本
 */
public record RuntimeFingerprint(
    String databaseProduct,
    String databaseVersion,
    String driverName,
    String driverVersion,
    String adapterVersion
) implements Serializable {

    /**
     * 防止指纹字段为空。
     */
    public RuntimeFingerprint {
        databaseProduct = safe(databaseProduct);
        databaseVersion = safe(databaseVersion);
        driverName = safe(driverName);
        driverVersion = safe(driverVersion);
        adapterVersion = safe(adapterVersion);
    }

    private static String safe(String value) {
        return value == null ? "unknown" : value;
    }

    /**
     * 返回适合缓存键的稳定摘要。
     *
     * @return 指纹摘要
     */
    public String cacheKey() {
        return String.join("|", databaseProduct, databaseVersion, driverName, driverVersion, adapterVersion);
    }
}
