#' Custom Theme for Bar Charts
#'
#' @return A custom theme object.
#'
#' @rdname theme_default
#'
#' @export
theme_bar <- function(
  flip = TRUE,
  add_text = FALSE,
  axis_text_x_angle = 0,
  axis_text_x_vjust = 0.5,
  axis_text_x_hjust = 0.5
) {
  # If add_text is TRUE, flip is FALSE
  if (!flip && !add_text) {
    par_axis_text_font_face <- "plain"
    par_axis_x <- TRUE
    par_axis_y <- TRUE
    par_axis_line_y <- FALSE
    par_axis_ticks_y <- TRUE
    par_axis_text_y <- TRUE
    par_axis_line_x <- TRUE
    par_axis_ticks_x <- TRUE
    par_axis_text_x <- TRUE
    par_grid_major_y <- TRUE
    par_grid_major_x <- FALSE
    par_grid_minor_y <- TRUE
    par_grid_minor_x <- FALSE
  } else if (flip && !add_text) {
    par_axis_text_font_face <- "plain"
    par_axis_x <- TRUE
    par_axis_y <- TRUE
    par_axis_line_y <- TRUE
    par_axis_ticks_y <- TRUE
    par_axis_text_y <- TRUE
    par_axis_line_x <- FALSE
    par_axis_ticks_x <- TRUE
    par_axis_text_x <- TRUE
    par_grid_major_y <- FALSE
    par_grid_major_x <- TRUE
    par_grid_minor_y <- FALSE
    par_grid_minor_x <- TRUE
  } else if (!flip && add_text) {
    par_axis_text_font_face <- "bold"
    par_axis_x <- TRUE
    par_axis_y <- TRUE
    par_axis_line_y <- FALSE
    par_axis_ticks_y <- FALSE
    par_axis_text_y <- FALSE
    par_axis_line_x <- FALSE
    par_axis_ticks_x <- TRUE
    par_axis_text_x <- TRUE
    par_grid_major_y <- FALSE
    par_grid_major_x <- FALSE
    par_grid_minor_y <- FALSE
    par_grid_minor_x <- FALSE
  } else if (flip && add_text) {
    par_axis_text_font_face <- "bold"
    par_axis_x <- TRUE
    par_axis_y <- TRUE
    par_axis_line_y <- FALSE
    par_axis_ticks_y <- TRUE
    par_axis_text_y <- TRUE
    par_axis_line_x <- FALSE
    par_axis_ticks_x <- FALSE
    par_axis_text_x <- FALSE
    par_grid_major_y <- FALSE
    par_grid_major_x <- FALSE
    par_grid_minor_y <- FALSE
    par_grid_minor_x <- FALSE
  }

  # Theme
  t <- theme_default(
    axis_text_font_face = par_axis_text_font_face,
    axis_x = par_axis_x,
    axis_y = par_axis_y,
    grid_major_y = par_grid_major_y,
    grid_major_x = par_grid_major_x,
    grid_minor_y = par_grid_minor_y,
    grid_minor_x = par_grid_minor_x,
    axis_text_y = par_axis_text_y,
    axis_line_y = par_axis_line_y,
    axis_ticks_y = par_axis_ticks_y,
    axis_text_x = par_axis_text_x,
    axis_line_x = par_axis_line_x,
    axis_ticks_x = par_axis_ticks_x,
    axis_text_x_angle = axis_text_x_angle,
    axis_text_x_vjust = axis_text_x_vjust,
    axis_text_x_hjust = axis_text_x_hjust
  )

  return(t)
}
