using System;
using System.Collections.Generic;
namespace Models;
///
/// 任务运行时模型 (TaskModel)
/// 设计说明:
/// 1) TaskDefinition 描述“配置”,TaskModel 描述“运行时进度”。二者分离利于 Mod 追加内容。
/// 2) 任务状态只保存必要字段,展示文本统一由 Definition + i18n 输出。
/// 3) 任务参与单位只记录 Id,避免模型直接引用 Node。
/// 注意事项:
/// - 如果没有 DefinitionId,可使用 Name 作为临时演示数据。
/// - Deadline 语义是“剩余回合数”,由 TurnSystem 递减。
/// 未来扩展:
/// - 可加入阶段状态(灵感/写作/实验/审核),与 UI 进度条分段对应。
/// - 可加入失败原因/完成评级,用于结算与肉鸽评分。
///
public sealed class TaskModel
{
public Guid Id { get; } = Guid.NewGuid();
public string DefinitionId { get; set; }
public string Name { get; set; }
public TaskTrack Track { get; set; }
public TaskKind Kind { get; set; }
public TaskDifficulty Difficulty { get; set; }
public TaskRuntime Runtime { get; }
public TaskRewardSnapshot Reward { get; set; } = new();
public List AssignedUnitIds { get; } = new();
public bool IsCompleted => Runtime.CurrentProgress >= Runtime.TotalWorkload;
public bool IsFailed => Runtime.RemainingTurns <= 0 && !IsCompleted;
public TaskModel(string name, TaskKind kind, float workload, int deadline)
{
Name = name;
Kind = kind;
Track = TaskTrack.LabProject;
Difficulty = TaskDifficulty.Standard;
Runtime = new TaskRuntime(workload, deadline);
}
public void AddProgress(float amount)
{
Runtime.CurrentProgress += amount;
if (Runtime.CurrentProgress > Runtime.TotalWorkload)
{
Runtime.CurrentProgress = Runtime.TotalWorkload;
}
}
}
///
/// 任务运行参数(进度与截止)
///
public sealed class TaskRuntime
{
public float TotalWorkload { get; set; }
public float CurrentProgress { get; set; }
public float DifficultyScale { get; set; } = 1.0f;
public int RemainingTurns { get; set; }
public TaskRuntime(float totalWorkload, int remainingTurns)
{
TotalWorkload = totalWorkload;
RemainingTurns = remainingTurns;
}
}
///
/// 运行时奖励快照(避免 Definition 被动态修改)
///
public sealed class TaskRewardSnapshot
{
public int Money { get; set; }
public int Reputation { get; set; }
public List PaperIds { get; } = new();
}