#' @title DrawingML graphic device for Microsoft Excel
#'
#' @description
#' Graphics devices for Microsoft Excel DrawingML format.
#'
#' @param file the file where output will appear.
#' @param height,width Height and width in inches.
#' @param offx,offy top and left origin of the plot
#' @param bg Default background color for the plot (defaults to "white").
#' @param fonts Named list of font names to be aliased with
#'   fonts installed on your system. If unspecified, the R default
#'   families `sans`, `serif`, `mono` and `symbol` are aliased
#'   to the families detected by [gdtools::font_set_auto()].
#'
#'   **Important:** fonts are referenced by name in the DrawingML output
#'   and are **not embedded**. The reader of the Excel file must also
#'   have the same fonts installed, otherwise Office will substitute them.
#'   For maximum portability, prefer fonts bundled with Microsoft Office
#'   such as `"Arial"`, `"Times New Roman"` and `"Courier New"`.
#'
#'   Fonts must be installed on your system; use
#'   `gdtools::font_family_exists()` to verify availability.
#'
#'   Example: `list(sans = "Arial", serif = "Times New Roman", mono = "Courier New")`.
#' @param pointsize default point size.
#' @param editable should vector graphics elements (points, text, etc.) be editable.
#' @param id specifies a unique identifier (integer) within the
#' sheet that will contain the DrawingML instructions.
#' @param last_rel_id specifies the last unique identifier (integer)
#' within relationship file that will be used to reference embedded
#' raster images if any.
#' @param standalone produce a standalone drawingml file? If \code{FALSE}, omits
#'   xml header and namespaces.
#' @examples
#' \donttest{
#' dml_xlsx(file = tempfile())
#' plot(1:11, (-5:5)^2, type = "b", main = "Simple Example")
#' dev.off()
#' }
#' @keywords device
#' @seealso \code{\link{Devices}}
#' @export
dml_xlsx <- function(
  file = "Rplots.dml",
  width = 6,
  height = 6,
  offx = 1,
  offy = 1,
  bg = "white",
  fonts = list(),
  pointsize = 12,
  editable = TRUE,
  id = 1L,
  last_rel_id = 1L,
  standalone = TRUE
) {
  img_directory <- tempfile()
  dir.create(img_directory, recursive = TRUE, showWarnings = FALSE)
  raster_prefix <- paste0(img_directory, "/raster-")

  system_fonts <- validate_fonts(fonts)
  invisible(XLSX_(
    file,
    bg,
    width,
    height,
    offx = offx,
    offy = offy,
    pointsize = pointsize,
    aliases = list(system = system_fonts),
    editable = editable,
    id = id,
    raster_prefix = raster_prefix,
    last_rel_id = last_rel_id,
    standalone = standalone
  ))
}
