namespace Admin.NET.Plugin.AiDOP.Service.S8.Rules.DataAccess;
///
/// S8-DATASET-PROVIDER-FOUNDATION-1:规则取数模式。
///
/// 用稳定常量而非 bool,因为后续可能出现第三种取数方式(例如事件流 / 外部 API 目录),
/// bool 会在那时被迫重构成枚举并污染已有数据。
///
/// 兼容语义:ado_s8_watch_rule.data_access_mode 为 NULL / 空白(132 条历史规则的现状)
/// 一律解析为 ,历史规则无需回填即可继续按原路径运行。
///
public static class S8DataAccessMode
{
/// 历史模式:规则自带 expression(SQL) + data_source_id,经 S8DataSourceRowLoader 取数。
public const string LegacySql = "LEGACY_SQL";
/// 标准数据集模式:规则只引用 dataset_code,由已注册 Provider 返回 canonical 行。
public const string StandardDataset = "STANDARD_DATASET";
///
/// 解析取数模式。NULL / 空白 → (向后兼容)。
/// 未知非空值显式抛错:静默回落 LEGACY_SQL 会让配置错误伪装成"正常运行",
/// 而 LEGACY_SQL 路径要求 expression 存在,回落后的报错信息会指向错误的根因。
///
public static string Resolve(string? rawMode)
{
if (string.IsNullOrWhiteSpace(rawMode)) return LegacySql;
var mode = rawMode.Trim();
if (string.Equals(mode, LegacySql, StringComparison.OrdinalIgnoreCase)) return LegacySql;
if (string.Equals(mode, StandardDataset, StringComparison.OrdinalIgnoreCase)) return StandardDataset;
throw new S8RuleEvaluatorException(
"data_access_mode_invalid",
$"未知的取数模式 {mode},仅支持 {LegacySql} / {StandardDataset}");
}
/// 校验用:判断字符串是否为可接受的取数模式(含 NULL / 空白)。
public static bool IsAcceptable(string? rawMode)
{
if (string.IsNullOrWhiteSpace(rawMode)) return true;
var mode = rawMode.Trim();
return string.Equals(mode, LegacySql, StringComparison.OrdinalIgnoreCase)
|| string.Equals(mode, StandardDataset, StringComparison.OrdinalIgnoreCase);
}
}