use anyhow::Result;
use chrono::NaiveDateTime;
use comfy_table::presets::UTF8_FULL;
use comfy_table::*;
use mostro_core::message::Content;
use mostro_core::order::{Kind, SmallOrder};
pub fn print_order_preview(ord: Content) -> Result<String, String> {
let single_order = match ord {
Content::Order(o) => o,
_ => return Err("Error".to_string()),
};
let mut table = Table::new();
table
.load_preset(UTF8_FULL)
.set_content_arrangement(ContentArrangement::Dynamic)
.set_width(160)
.set_header(vec![
Cell::new("Buy/Sell")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Sats Amount")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Fiat Code")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Fiat Amount")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Payment method")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Premium %")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
]);
let r = Row::from(vec![
if let Some(k) = single_order.kind {
match k {
Kind::Buy => Cell::new(k.to_string())
.fg(Color::Green)
.set_alignment(CellAlignment::Center),
Kind::Sell => Cell::new(k.to_string())
.fg(Color::Red)
.set_alignment(CellAlignment::Center),
}
} else {
Cell::new("BUY/SELL").set_alignment(CellAlignment::Center)
},
if single_order.amount == 0 {
Cell::new("market price").set_alignment(CellAlignment::Center)
} else {
Cell::new(single_order.amount).set_alignment(CellAlignment::Center)
},
Cell::new(single_order.fiat_code.to_string()).set_alignment(CellAlignment::Center),
Cell::new(single_order.fiat_amount.to_string()).set_alignment(CellAlignment::Center),
Cell::new(single_order.payment_method.to_string()).set_alignment(CellAlignment::Center),
Cell::new(single_order.premium.to_string()).set_alignment(CellAlignment::Center),
]);
table.add_row(r);
Ok(table.to_string())
}
pub fn print_orders_table(orders_table: Vec<SmallOrder>) -> Result<String> {
let mut table = Table::new();
let mut rows: Vec<Row> = Vec::new();
if orders_table.is_empty() {
table
.load_preset(UTF8_FULL)
.set_content_arrangement(ContentArrangement::Dynamic)
.set_width(160)
.set_header(vec![Cell::new("Sorry...")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center)]);
let mut r = Row::new();
r.add_cell(
Cell::new("No offers found with requested parameters...")
.fg(Color::Red)
.set_alignment(CellAlignment::Center),
);
rows.push(r);
} else {
table
.load_preset(UTF8_FULL)
.set_content_arrangement(ContentArrangement::Dynamic)
.set_width(160)
.set_header(vec![
Cell::new("Buy/Sell")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Order Id")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Status")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Amount")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Fiat Code")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Fiat Amount")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Payment method")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
Cell::new("Created")
.add_attribute(Attribute::Bold)
.set_alignment(CellAlignment::Center),
]);
for single_order in orders_table.into_iter() {
let date = NaiveDateTime::from_timestamp_opt(single_order.created_at.unwrap_or(0), 0);
let r = Row::from(vec![
if let Some(k) = single_order.kind {
match k {
Kind::Buy => Cell::new(k.to_string())
.fg(Color::Green)
.set_alignment(CellAlignment::Center),
Kind::Sell => Cell::new(k.to_string())
.fg(Color::Red)
.set_alignment(CellAlignment::Center),
}
} else {
Cell::new("BUY/SELL").set_alignment(CellAlignment::Center)
},
Cell::new(single_order.id.unwrap()).set_alignment(CellAlignment::Center),
Cell::new(single_order.status.unwrap().to_string())
.set_alignment(CellAlignment::Center),
if single_order.amount == 0 {
Cell::new("market price").set_alignment(CellAlignment::Center)
} else {
Cell::new(single_order.amount.to_string()).set_alignment(CellAlignment::Center)
},
Cell::new(single_order.fiat_code.to_string()).set_alignment(CellAlignment::Center),
Cell::new(single_order.fiat_amount.to_string())
.set_alignment(CellAlignment::Center),
Cell::new(single_order.payment_method.to_string())
.set_alignment(CellAlignment::Center),
Cell::new(date.unwrap()),
]);
rows.push(r);
}
}
table.add_rows(rows);
Ok(table.to_string())
}