use crate::dcl::Pan;
use crate::dcl::PeaAssVar;
use crate::dcl::VarType;
use crate::dcl::SSHOW_YEAR_BEG;
use crate::dcl::SSHOW_YEAR_END;
use crate::utl::get_pvrw00;
use crate::utl::get_sbrw00;
use askama::Template;
use askama_web::WebTemplate;
use axum::extract::Query;
use serde::Deserialize;
use std::collections::HashMap;
#[derive(Debug, Deserialize, Default)]
pub struct Param {
pub ben: Option<usize>,
}
pub struct WebTempRow {
pvid: String,
evgr: Vec<f32>,
}
#[derive(Template, WebTemplate)]
#[template(path = "p08.html")]
pub struct WebTemp {
name: String,
rows: Vec<WebTempRow>,
}
pub const PROV: [&str; 25] = [
"สมุทรสาคร",
"พระนครศรีอยุธยา",
"ปทุมธานี",
"ชลบุรี",
"ระยอง",
"ฉะเชิงเทรา",
"นครปฐม",
"ปราจีนบุรี",
"สงขลา",
"ราชบุรี",
"ภูเก็ต",
"นครสวรรค์",
"ระนอง",
"สมุทรสงคราม",
"กระบี่",
"เพชรบุรี",
"สุราษฎร์ธานี",
"สระบุรี",
"นครราชสีมา",
"เชียงใหม่",
"พิษณุโลก",
"ขอนแก่น",
"ลพบุรี",
"บุรีรัมย์",
"สระแก้ว",
];
use sglib04::prc43::BENET;
fn ben_nm(n: usize) -> String {
for (i, (h, _)) in BENET.iter().enumerate() {
let i = i + 1;
let h = h.trim();
if i == n {
return h.to_string();
}
}
"".to_string()
}
pub async fn p08(para: Query<Param>) -> WebTemp {
ben_nm(0);
let pvrw = get_pvrw00();
let mut pvasm = HashMap::<String, PeaAssVar>::new();
for a in pvrw {
pvasm.insert(a.pvid.to_string(), a.clone());
}
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 pv = pv.to_string();
let Some(a) = pvasm.get(&pv) else {
println!("error {}", pv);
continue;
};
pvrwv.push(a.clone());
pvrwm.insert(pv.to_string(), i);
}
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;
};
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;
}
let mut b_be = VarType::FirBilAccu.tousz();
let mut b_en = VarType::FirDataEntrySave.tousz();
let mut ben_id = 0;
let mut ben_no = 0;
if let Some(ben) = para.ben {
ben_no = ben - 7;
let b_of = ben - 8;
ben_id = ben;
b_be += b_of;
b_en = b_be;
}
let mut rows2 = Vec::<WebTempRow>::new();
let mut bbbs = vec![0.0; 20];
for (_, sr) in pvrwv.iter().enumerate() {
let b8 = sr.vy[VarType::FirBilAccu.tousz()].clone();
let mut ben = vec![0.0; b8.len()];
for vi in b_be..=b_en {
let mut bbs = 0.0;
for (bi, bn) in ben.iter_mut().enumerate() {
*bn += sr.vy[vi][bi];
bbs += sr.vy[vi][bi];
}
bbbs[vi - VarType::FirBilAccu.tousz()] += bbs;
}
let mut ben2 = vec![0.0; 3];
ben2.append(&mut ben);
let rw = WebTempRow {
pvid: sr.pvid.to_string(),
evgr: ben2,
};
rows2.push(rw);
}
WebTemp {
name: format!(
"Energy Management Benefit - {ben_no} ({ben_id}) - {}",
ben_nm(ben_id)
),
rows: rows2,
}
}