using Plugin.Cowain.Driver.Abstractions; using Plugin.Cowain.Driver.Attributes; using Plugin.Cowain.Driver.IServices; using Plugin.Cowain.Driver.Models; namespace Plugin.Cowain.Driver.Services; public class ActionPluginService : IActionPluginService { private readonly IEnumerable _actionConditions; private readonly IEnumerable _variableActions; public ActionPluginService(IEnumerable actionConditions, IEnumerable variableActions) { _actionConditions = actionConditions; _variableActions = variableActions; } public List? GetActions() { var infos = new List(); foreach (var item in _variableActions) { var action = item.GetType(); var attribute = action.GetCustomAttributes(typeof(ActionAttribute), false).FirstOrDefault() as ActionAttribute; if (attribute != null) { var driverInfo = new ActionInfo { Name = attribute.Name, Desc = attribute.Desc, }; infos.Add(driverInfo); } } return infos; } public List? GetConditions() { var infos = new List(); foreach (var item in _actionConditions) { var action = item.GetType(); var attribute = action.GetCustomAttributes(typeof(ConditionAttribute), false).FirstOrDefault() as ConditionAttribute; if (attribute != null) { var driverInfo = new ConditionInfo { Name = attribute.Name, Desc = attribute.Desc, }; infos.Add(driverInfo); } } return infos; } public IActionCondition? GetCondition(string name) { var condition = _actionConditions.FirstOrDefault(d => d.GetType().GetCustomAttributes(typeof(ConditionAttribute), false).FirstOrDefault() is ConditionAttribute attribute && attribute.Name == name); return condition; } public IVariableAction? GetAction(string name) { var action = _variableActions.FirstOrDefault(d => d.GetType().GetCustomAttributes(typeof(ActionAttribute), false).FirstOrDefault() is ActionAttribute attribute && attribute.Name == name); return action; } }