using System.Diagnostics.CodeAnalysis;
using AIStudio.Settings.DataModel;
using Lua;
namespace AIStudio.Tools.PluginSystem;
///
/// Describes the data sources which configuration plugins provide.
///
///
/// The settings keep every data source in a list of IDataSource, and a data source of a configuration
/// plugin is a record struct rather than a ConfigurationBaseObject. That is why data sources are read
/// in a way of their own.
///
public sealed class DataSourceConfigurationObjectDescriptor : PluginConfigurationObjectDescriptor
{
///
public override PluginConfigurationObjectType Type => PluginConfigurationObjectType.DATA_SOURCE;
///
public override string LuaTableName => "DATA_SOURCES";
///
public override bool TryParse(LuaTable mainTable, Guid configPluginId, List configObjects, bool dryRun, string pluginPath) => PluginConfigurationObject.TryParseDataSources(this, mainTable, configPluginId, configObjects, dryRun);
///
public override bool TryParseSnippet(LuaTable table, [NotNullWhen(true)] out IConfigurationObject? configObject)
{
var isValid = DataSourceERI_V1.TryParseConfiguration(1, table, Guid.Empty, dryRun: true, out var dataSource);
configObject = isValid ? dataSource : null;
return isValid;
}
///
///
/// The secret of a data source is not necessarily an API key, e.g., it is a password, so it is
/// deleted as a secret.
///
public override Task CleanLeftOverAsync(IList availablePlugins, IReadOnlySet deployedEnterpriseConfigPluginIds, IReadOnlySet notStartedConfigPluginIds, IList configObjectList) => PluginConfigurationObject.CleanLeftOverConfigurationObjects(this.Type, x => x.DataSources, availablePlugins, deployedEnterpriseConfigPluginIds, notStartedConfigPluginIds, configObjectList, SecretStoreType.DATA_SOURCE, deleteSecret: true);
///
public override int RemovePluginObjects(Data settings) => settings.DataSources.RemoveAll(dataSource => dataSource.IsEnterpriseConfiguration);
}