use bft_crdt_derive::add_crdt_fields;
use bft_json_crdt::{
    json_crdt::{CrdtNode, IntoCrdtNode},
    list_crdt::ListCrdt,
};
use serde::{Deserialize, Serialize};

#[add_crdt_fields]
#[derive(Clone, CrdtNode, Serialize, Deserialize)]
pub struct TransactionList {
    pub list: ListCrdt<Transaction>,
}

impl TransactionList {
    pub fn view_sha(&self) -> String {
        sha256::digest(serde_json::to_string(&self.list.view()).unwrap().as_bytes()).to_string()
    }
}

/// A fake Transaction struct we can use as a simulated payload
#[add_crdt_fields]
#[derive(Clone, CrdtNode, Serialize, Deserialize, PartialEq)]
pub struct Transaction {
    from: String,
    to: String,
    amount: f64,
}
