use serde::Deserialize;
use serde::Serialize;
use strum::Display;
use crate::test::simulation::db::entity::Customer as DbCustomer;
use crate::test::simulation::db::entity::InventoryRecord as DbInventoryRecord;
use crate::test::simulation::db::entity::Order as DbOrder;
use crate::test::simulation::db::entity::Product as DbProduct;
use crate::test::simulation::db::entity::Session as DbSession;
use super::entity::inventory::IncomingShipment;
use super::entity::inventory::InventoryCheck;
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ScriptTitle {
pub period: i32,
pub products: i32,
pub market_capacity: u32,
}
#[derive(Display, Clone, Debug, Serialize, Deserialize)]
#[serde(deny_unknown_fields)]
pub enum Step {
#[serde(rename = "h")]
Title(ScriptTitle),
#[serde(rename = "d")]
Day(i32),
AddProduct(DbProduct),
#[serde(rename = "ac")]
AddCustomer(DbCustomer),
#[serde(rename = "ao")]
AddOrder(DbOrder),
#[serde(rename = "uo")]
UpdateOrder(DbOrder),
#[serde(rename = "as")]
AddSession(DbSession),
UpdateSession(DbSession),
CollectSessions,
#[serde(rename = "ai")]
AddInventoryRecord(DbInventoryRecord),
#[serde(rename = "is")]
AddStock(IncomingShipment),
ViewProduct(i32),
#[serde(rename = "ci")]
CheckInventory(InventoryCheck),
}