use crate::interactive_fiction::data::ids::{
ConditionId, EntityId, FlagKey, ItemId, NodeId, QuestId, RoomId, RuleId, StatKey, TimerId,
};
use crate::interactive_fiction::data::value::Value;
use serde::{Deserialize, Serialize};
#[non_exhaustive]
#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum Condition {
Always,
Never,
All(Vec<Condition>),
Any(Vec<Condition>),
Not(Box<Condition>),
FlagEquals(FlagKey, Value),
FlagSet(FlagKey),
FlagUnset(FlagKey),
StatAtLeast(StatKey, i64),
StatAtMost(StatKey, i64),
PlayerIn(RoomId),
Visited(RoomId),
HasItem(ItemId),
ItemInRoom(ItemId, RoomId),
ItemIsSomewhere(ItemId),
EntityIn(EntityId, RoomId),
DispositionAtLeast(EntityId, i64),
TurnAtLeast(u32),
TurnAtMost(u32),
QuestAt(QuestId, NodeId),
QuestReached(QuestId, NodeId),
TimerRunning(TimerId),
TimerExpired(TimerId),
RuleFired(RuleId),
Chance(u8),
Ref(ConditionId),
}