use std::iter::zip;
use genpdf::*;
use crate::{
tabs::{
classes::get_classes, get_school, limitations::limitations_ui::classes_sched, school_name,
},
DAYS,
};
pub fn classes_prints() {
let fon_family = crate::fonts::font_family();
let mut doc = genpdf::Document::new(fon_family);
// Change the default settings
doc.set_title(format!("{}", &*school_name().read()));
// Customize the pages
let mut decorator = genpdf::SimplePageDecorator::new();
decorator.set_margins(10);
doc.set_page_decorator(decorator);
// let mut buf: Vec<u8> = Vec::new();
print_classes(&mut doc);
// doc.render(&mut buf).expect("Render edilemedi");
doc.render_to_file("output.pdf")
.expect("Failed to write PDF file");
// let png_jsarray: zoon::JsValue = js_sys::Uint8Array::from(&buf[..]).into();
// // the buffer has to be an array of arrays
// let png_buffer: js_sys::Array = std::iter::IntoIterator::into_iter([png_jsarray]).collect();
// let mut properties = web_sys::BlobPropertyBag::new();
// properties.type_("application/pdf");
// let png_blob =
// web_sys::Blob::new_with_buffer_source_sequence_and_options(&png_buffer, &properties)
// .unwrap();
// let url = web_sys::Url::create_object_url_with_blob(&png_blob).unwrap();
// let window = web_sys::window().unwrap();
// window.open_with_url(&url).expect("Pdf açılamadı");
}
fn print_classes(doc: &mut genpdf::Document) {
let school_name = &*school_name().read();
doc.set_minimal_conformance();
doc.set_line_spacing(1.25);
let mut decorator = genpdf::SimplePageDecorator::new();
decorator.set_margins(10 as i32);
doc.set_page_decorator(decorator);
doc.set_line_spacing(1.25);
let clss = &*get_classes().read();
for class in clss {
let mut title = elements::LinearLayout::vertical();
let mut title_style = style::Style::new();
title_style.set_bold();
title_style.set_font_size(20);
let title_paragraph = elements::Paragraph::default();
title.push(
title_paragraph
.styled_string(school_name, title_style)
.aligned(Alignment::Center),
);
let cls_name = format!("{}", class.1.name);
let mut teacher_style = style::Style::new();
teacher_style.set_italic();
teacher_style.set_font_size(18);
title.push(elements::Paragraph::new(&cls_name).aligned(Alignment::Center));
doc.push(title);
//doc.push(elements::Break::new(1));
add_row(doc, class.1.id);
doc.push(elements::PageBreak::new());
}
}
fn add_row(doc: &mut genpdf::Document, c: i32) {
let len = get_school().read().hour as usize;
let mut table = elements::TableLayout::new(vec![8; len + 1]);
table.set_cell_decorator(elements::FrameCellDecorator::new(true, true, false));
let mut row = table.row();
row.push_element(
create_row_title(format!("{} ve {}", "Günler", "Saatler")).aligned(Alignment::Center),
);
for hour in vec![0; len].iter().enumerate() {
row.push_element(create_row_title(format!("{}. saat", hour.0)).aligned(Alignment::Center));
}
row.push().expect("Invalid table row");
let sched = classes_sched().read();
let scheds = sched.get(&c).unwrap();
for (day, sched) in zip(DAYS, scheds) {
let mut row = table.row();
let mut day_row = elements::LinearLayout::vertical();
day_row.push(create_row_title(day.to_string()).aligned(Alignment::Center));
let mut line_style = style::Style::new();
line_style.bold();
line_style.set_font_size(8);
// let par = elements::Paragraph::default()
// .styled_string("00:00-00:00", line_style)
// .aligned(Alignment::Center);
// day_row.push(par);
row.push_element(day_row);
for s in sched {
if let Some(s) = s {
row.push_element(create_row_title(format!("{:?}", s)))
} else {
row.push_element(create_row_title("".to_string()))
}
}
row.push().unwrap();
}
doc.push(table);
}
fn create_row_title(title: String) -> elements::Paragraph {
let paragraph = elements::Paragraph::default();
let mut title_style = style::Style::new();
title_style.bold();
title_style.set_font_size(10);
paragraph.styled_string(title, title_style)
}