///|
fn pdf_create_blank_pages(
  paper : @geometry.PaperSize,
  page_count : Int,
) -> Array[@page.PdfPage] {
  let pages : Array[@page.PdfPage] = []
  if page_count > 0 {
    for _ in 0.. Double,
) -> PdfDocument raise @core.PdfError {
  let document = pdf_document_empty()
  let page_root_number = document.add_pagetree(
    pdf_create_blank_pages(paper, page_count),
  )
  ignore(document.add_root(page_root_number, []))
  document.change_id("", get_time)
  document
}

///|
fn pdf_create_now_as_double() -> Double {
  @env.now().to_double()
}

///|
/// Create a blank document from page dimensions in PDF points.
pub fn pdf_blank_document(
  width : Double,
  height : Double,
  page_count : Int,
) -> PdfDocument raise @core.PdfError {
  pdf_create_blank_document_with_id_time(
    @geometry.paper_size_make(PdfPoint, width, height),
    page_count,
    pdf_create_now_as_double,
  )
}

///|
/// Create a blank document from a named paper size.
pub fn pdf_blank_document_paper(
  paper : @geometry.PaperSize,
  page_count : Int,
) -> PdfDocument raise @core.PdfError {
  pdf_create_blank_document_with_id_time(
    paper, page_count, pdf_create_now_as_double,
  )
}