using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using BetterGenshinImpact.Service;
using CommunityToolkit.Mvvm.ComponentModel;
using Newtonsoft.Json;
using JsonSerializer = System.Text.Json.JsonSerializer;
namespace BetterGenshinImpact.Core.Script.Group;
///
/// 调度器 配置组
///
public partial class ScriptGroup : ObservableObject
{
public int Index { get; set; }
[ObservableProperty]
private string _name = string.Empty;
[ObservableProperty]
private ScriptGroupConfig _config = new();
[ObservableProperty]
private ObservableCollection _projects = [];
[System.Text.Json.Serialization.JsonIgnore]
public bool NextFlag
{
get => _nextFlag;
set => SetProperty(ref _nextFlag, value);
}
private bool _nextFlag;
public ScriptGroup()
{
Projects.CollectionChanged += ProjectsCollectionChanged;
}
private void ProjectsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
OnPropertyChanged(nameof(Projects));
}
public string ToJson()
{
return JsonSerializer.Serialize(this, ConfigService.JsonOptions);
}
public static ScriptGroup FromJson(string json)
{
var group = JsonConvert.DeserializeObject(json) ?? throw new Exception("解析配置组JSON配置失败");
ResetGroupInfo(group);
return group;
}
public static void ResetGroupInfo(ScriptGroup group)
{
foreach (var project in group.Projects)
{
project.GroupInfo = group;
}
}
public void AddProject(ScriptGroupProject project)
{
project.GroupInfo = this;
Projects.Add(project);
}
}