use crate::dcl::Pan;
use crate::dcl::PeaAssVar;
use askama::Template;
use askama_web::WebTemplate;
use axum::extract::Query;
use serde::Deserialize;
#[derive(Debug, Deserialize, Default)]
pub struct Param {
pub sbid: Option<String>,
}
#[derive(Template, WebTemplate, Debug, Default)]
#[template(path = "tr02.html")]
pub struct WebTemp {
sbid: String,
name: String,
assv: Vec<PeaAssVar>,
norv: Vec<PeaAssVar>,
maxv: Vec<PeaAssVar>,
evs: Vec<PeaAssVar>,
}
use crate::dcl::VarType;
use crate::dcl::DNM;
use crate::dcl::WE_EV;
pub async fn tr02(para: Query<Param>) -> WebTemp {
let Some(ref sbid) = para.sbid else {
println!("NO SBID");
return WebTemp::default();
};
println!("para:{sbid:?}");
let Ok(buf) = std::fs::read(format!("{DNM}/{sbid}-rw2.bin")) else {
println!("NO rw3.bin file: {sbid}");
return WebTemp::default();
};
let Ok((mut assv, _)): Result<(Vec<PeaAssVar>, usize), _> =
bincode::decode_from_slice(&buf[..], bincode::config::standard())
else {
println!("Failed to decode rw3: {sbid}");
return WebTemp::default();
};
let Ok(buf) = std::fs::read(format!("{DNM}/{sbid}-nor.bin")) else {
println!("NO nor.bin file: {sbid}");
return WebTemp::default();
};
let Ok((mut norv, _)): Result<(Vec<PeaAssVar>, usize), _> =
bincode::decode_from_slice(&buf[..], bincode::config::standard())
else {
println!("Failed to decode nor: {sbid}");
return WebTemp::default();
};
let Ok(buf) = std::fs::read(format!("{DNM}/pea-mx.bin")) else {
println!("NO nor.bin file: {sbid}");
return WebTemp::default();
};
let Ok((maxv, _)): Result<(Vec<PeaAssVar>, usize), _> =
bincode::decode_from_slice(&buf[..], bincode::config::standard())
else {
println!("Failed to decode max: {sbid}");
return WebTemp::default();
};
let Ok(buf) = std::fs::read(format!("{DNM}/{sbid}-ev.bin")) else {
println!("NO ev.bin file: {sbid}");
return WebTemp::default();
};
let Ok((mut evs, _)): Result<(Vec<PeaAssVar>, usize), _> =
bincode::decode_from_slice(&buf[..], bincode::config::standard())
else {
println!("Failed to decode ev: {sbid}");
return WebTemp::default();
};
assv.sort_by(|b, a| {
a.v[VarType::SmallSellTr.tousz()]
.v
.partial_cmp(&b.v[VarType::SmallSellTr.tousz()].v)
.unwrap()
});
norv.sort_by(|b, a| {
a.v[VarType::SmallSellTr.tousz()]
.v
.partial_cmp(&b.v[VarType::SmallSellTr.tousz()].v)
.unwrap()
});
evs.sort_by(|b, a| {
a.v[VarType::SmallSellTr.tousz()]
.v
.partial_cmp(&b.v[VarType::SmallSellTr.tousz()].v)
.unwrap()
});
WebTemp {
sbid: sbid.to_string(),
name: "SmallSellTr".to_string(),
assv,
norv,
maxv,
evs,
}
}