using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
namespace AI.Models.SpecialMessages
{
///
/// 网格化参数卡片的执行阶段
///
public enum GriddingParamCardPhase
{
/// 正在从业务层加载参数
Loading = 0,
/// 参数已加载,等待用户编辑并点击生成
Ready = 1,
/// 正在执行成图
Generating = 2,
/// 成图完成
Done = 3,
/// 出错(加载失败或成图失败)
Error = 4,
}
///
/// 网格化参数设置综合卡片:将「获取参数」「编辑参数」「执行成图」合并到一张卡片。
/// 整个业务流程由卡片本身驱动,AI 只需调用一次展示此卡片;
/// 用户确认参数后点击"生成"按钮,卡片自动完成参数设置和成图,最终摘要发回 AI。
///
public class GriddingParamCardMessage : ISpecialMessage, INotifyPropertyChanged
{
private GriddingParamCardPhase _phase = GriddingParamCardPhase.Loading;
private string _statusMessage = string.Empty;
private string _generateButtonLabel = "生成";
public string Id { get; set; } = Guid.NewGuid().ToString();
public string TypeName => "GriddingParamCard";
public bool IsLive => false;
// ── 阶段控制 ──────────────────────────────────────────────────────────
public GriddingParamCardPhase Phase
{
get => _phase;
set
{
if (SetProperty(ref _phase, value))
{
OnPropertyChanged(nameof(IsLoading));
OnPropertyChanged(nameof(ShowItems));
OnPropertyChanged(nameof(ShowGenerateButton));
OnPropertyChanged(nameof(IsGenerating));
OnPropertyChanged(nameof(IsDone));
OnPropertyChanged(nameof(IsError));
OnPropertyChanged(nameof(ShowDoneBadge));
OnPropertyChanged(nameof(ShowErrorMessage));
}
}
}
// ── 状态派生属性 ─────────────────────────────────────────────────────
/// 是否正在加载参数(显示 loading 占位)
public bool IsLoading => _phase == GriddingParamCardPhase.Loading;
/// 是否显示参数列表(非 Loading 阶段)
public bool ShowItems => _phase != GriddingParamCardPhase.Loading;
/// 是否显示"生成"按钮(Ready 阶段)
public bool ShowGenerateButton => _phase == GriddingParamCardPhase.Ready;
/// 是否正在执行成图
public bool IsGenerating => _phase == GriddingParamCardPhase.Generating;
/// 成图是否已完成
public bool IsDone => _phase == GriddingParamCardPhase.Done;
/// 是否处于错误状态
public bool IsError => _phase == GriddingParamCardPhase.Error;
/// 是否显示"成图完成"标记
public bool ShowDoneBadge => _phase == GriddingParamCardPhase.Done;
/// 是否显示错误信息
public bool ShowErrorMessage => _phase == GriddingParamCardPhase.Error && !string.IsNullOrEmpty(_statusMessage);
// ── 状态文案 ──────────────────────────────────────────────────────────
/// 状态提示文案(加载中、错误信息、成功提示等)
public string StatusMessage
{
get => _statusMessage;
set
{
SetProperty(ref _statusMessage, value ?? string.Empty);
OnPropertyChanged(nameof(ShowErrorMessage));
OnPropertyChanged(nameof(HasStatusMessage));
}
}
/// 是否有状态信息
public bool HasStatusMessage => !string.IsNullOrEmpty(_statusMessage);
/// "生成"按钮文案(执行中可切换为"生成中...")
public string GenerateButtonLabel
{
get => _generateButtonLabel;
set => SetProperty(ref _generateButtonLabel, value ?? "生成");
}
// ── 参数项列表 ────────────────────────────────────────────────────────
/// 参数项列表(从业务层加载后填充,用户可编辑)
public ObservableCollection Items { get; } = new ObservableCollection();
// ── INotifyPropertyChanged ───────────────────────────────────────────
public event PropertyChangedEventHandler? PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
protected bool SetProperty(ref T field, T value, [CallerMemberName] string? propertyName = null)
{
if (EqualityComparer.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
}
}