use crate::dcl::Pan;
use crate::utl::get_sbrw00;
use askama::Template;
use askama_web::WebTemplate;
use crate::dcl::PeaAssVar;
use crate::dcl::VarType;
use crate::dcl::EV_AT_2050;
use crate::dcl::EV_HR_DAY;
use crate::dcl::EV_MWH_BAHT;
use crate::dcl::SSHOW_YEAR_BEG;
use crate::dcl::SSHOW_YEAR_END;
use crate::utl::get_scurv;
pub struct WebTempRow {
sbid: String,
pvid: String,
note: String,
evrt: f32,
evgr: Vec<f32>,
}
#[derive(Template, WebTemplate)]
#[template(path = "p06.html")]
pub struct WebTemp {
name: String,
rows: Vec<WebTempRow>,
}
pub const PROV: [&str; 25] = [
"สมุทรสาคร",
"พระนครศรีอยุธยา",
"ปทุมธานี",
"ชลบุรี",
"ระยอง",
"ฉะเชิงเทรา",
"นครปฐม",
"ปราจีนบุรี",
"สงขลา",
"ราชบุรี",
"ภูเก็ต",
"นครสวรรค์",
"ระนอง",
"สมุทรสงคราม",
"กระบี่",
"เพชรบุรี",
"สุราษฎร์ธานี",
"สระบุรี",
"นครราชสีมา",
"เชียงใหม่",
"พิษณุโลก",
"ขอนแก่น",
"ลพบุรี",
"บุรีรัมย์",
"สระแก้ว",
];
use std::collections::HashMap;
pub async fn p06() -> WebTemp {
let sbrw = get_sbrw00();
let mut pvrwm = HashMap::<String, usize>::new();
let mut pvrwv = Vec::<PeaAssVar>::new();
for (i, pv) in PROV.iter().enumerate() {
let mut ass = PeaAssVar::from(0);
ass.pvid = pv.to_string();
pvrwv.push(ass);
pvrwm.insert(pv.to_string(), i);
}
let mut cn = 0;
for sr in sbrw.iter() {
let note = format!("{}", sr.v[VarType::TakeNote as usize].v);
if note != "1" {
continue;
}
if sr.sbid == "SQB" {
continue;
}
let pv = sr.pvid.to_string();
let Some(pvi) = pvrwm.get_mut(&pv) else {
println!("error {pv}");
continue;
};
cn += 1;
pvrwv[*pvi].add(sr);
}
let evs: f32 = sbrw
.iter()
.map(|sr| sr.v[VarType::NoHmChgEvTr as usize].v)
.sum();
let mut evcs2 = vec![0f32; sbrw.len()];
for (i, sr) in pvrwv.iter().enumerate() {
evcs2[i] = sr.v[VarType::NoHmChgEvTr as usize].v / evs;
}
println!("cnt: {cn}");
let mut rows2 = Vec::<WebTempRow>::new();
for (i, sr) in pvrwv.iter().enumerate() {
let mut evgr = get_scurv();
for ev in evgr.iter_mut() {
*ev *= evcs2[i] * EV_AT_2050;
*ev *= 0.007;
*ev *= 365.0 * EV_HR_DAY;
*ev *= EV_MWH_BAHT;
}
let rw = WebTempRow {
sbid: sr.sbid.to_string(),
pvid: sr.pvid.to_string(),
note: "".to_string(),
evrt: evcs2[i],
evgr,
};
rows2.push(rw);
}
let mut rows = Vec::<WebTempRow>::new();
let mut evcs = vec![0f32; sbrw.len()];
for (i, sr) in sbrw.iter().enumerate() {
evcs[i] = sr.v[VarType::NoHmChgEvTr as usize].v / evs;
}
for (i, sr) in sbrw.iter().enumerate() {
let note = format!("{}", sr.v[VarType::TakeNote as usize].v);
if note != "1" {
continue;
}
if sr.sbid == "SQB" {
continue;
}
let evrt = evcs[i];
let mut evgr = get_scurv();
for ev in evgr.iter_mut() {
*ev *= evrt * EV_AT_2050;
*ev *= 0.007;
*ev *= 365.0 * EV_HR_DAY;
*ev *= EV_MWH_BAHT;
}
let rw = WebTempRow {
sbid: sr.sbid.to_string(),
pvid: sr.pvid.to_string(),
note,
evrt,
evgr,
};
rows.push(rw);
}
WebTemp {
name: "Year Baht for Charge EV - p06".to_string(),
rows: rows2,
}
}