package com.easyagents.federation.sql.source;

/**
 * 已启用的数据源共享状态。
 *
 * @param definition 数据源定义
 * @param checksum 定义校验和
 */
public record ActiveSourceState(
    FederationSourceDefinition definition,
    String checksum
) implements FederationSourceState {

    /**
     * 校验启用状态。
     */
    public ActiveSourceState {
        if (definition == null) {
            throw new IllegalArgumentException("definition must not be null");
        }
        if (checksum == null || checksum.isBlank()) {
            throw new IllegalArgumentException("checksum must not be blank");
        }
        if (!checksum.equals(definition.checksum())) {
            throw new IllegalArgumentException("checksum does not match source definition");
        }
    }

    /**
     * 从 Definition 创建启用状态。
     *
     * @param definition 数据源定义
     * @return 启用状态
     */
    public static ActiveSourceState of(FederationSourceDefinition definition) {
        return new ActiveSourceState(definition, definition.checksum());
    }

    /**
     * 返回数据源标识。
     *
     * @return 数据源标识
     */
    @Override
    public SourceId sourceId() {
        return definition.sourceId();
    }

    /**
     * 返回定义版本。
     *
     * @return 定义版本
     */
    @Override
    public long revision() {
        return definition.revision();
    }
}
