@Override
  protected void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html");
    boolean getAll = (request.getParameter("id") == null);

    try {
      VehicleEntityManager vehicleEntityManager = new VehicleEntityManager();
      if (getAll) {
        for (Vehicle vehicle : vehicleEntityManager.getAll())
          response.getWriter().write(vehicle.toString() + '\n');

        LOGGER.info("Successfully fetched Vehicles list.");
      } else {
        int id = Integer.parseInt(request.getParameter("id").trim());
        Vehicle vehicle = vehicleEntityManager.get(id);
        response.getWriter().write(vehicle.toString());
        LOGGER.info(String.format("Successfully fetched Vehicle with id: %d.", id));
      }

    } catch (Exception e) {
      LOGGER.error(String.format("Failed to handle request: %s", request));
      if (getAll) {
        LOGGER.error("Exception thrown while getting Vehicles list: %s", e);
        response.sendError(500, "Internal Server Error: Getting Vehicles list failed. \n");
      } else {
        LOGGER.error(
            String.format(
                "Exception thrown while getting Vehicle with ID: %s", request.getParameter("id")),
            e);
        response.sendError(
            500,
            String.format(
                "Internal Server Error: Fetching Vehicle with id: %s failed. \n",
                request.getParameter("id")));
      }
    }

    response.setStatus(200);
  }
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    response.setContentType("text/html");

    boolean delete = (request.getParameter("delete") != null);
    boolean update = (request.getParameter("id") != null);

    Vehicle vehicle = new Vehicle();

    try {

      VehicleEntityManager vehicleEntityManager = new VehicleEntityManager();

      if (delete) {
        int id = Integer.parseInt(request.getParameter("id").trim());
        vehicleEntityManager.delete(id);
        LOGGER.info(String.format("Successfully deleted vehicle with ID: %d", id));
      } else {
        vehicle.setBrand(request.getParameter("brand"));
        vehicle.setEngine(Integer.parseInt(request.getParameter("engine").trim()));
        if (request.getParameter("horsepower") != null
            && request.getParameter("horsepower").length() > 0)
          vehicle.setHorsepower(Integer.parseInt(request.getParameter("horsepower").trim()));
        if (request.getParameter("mileage") != null && request.getParameter("mileage").length() > 0)
          vehicle.setMileage(Integer.parseInt(request.getParameter("mileage").trim()));
        vehicle.setType(request.getParameter("type"));
        vehicle.setVIN(request.getParameter("VIN"));
        vehicle.setProductionDate(new Date(System.currentTimeMillis()));
        vehicle.setAvailable(Boolean.parseBoolean(request.getParameter("available")));
        if (update) {
          vehicle.setId(Integer.parseInt(request.getParameter("id").trim()));
          LOGGER.info("Updating vehicle:" + vehicle.toString());
          vehicleEntityManager.update(vehicle);
          LOGGER.info(String.format("Successfully updated vehicle: %s", vehicle));
        } else {
          LOGGER.info("Adding vehicle:" + vehicle.toString());
          vehicleEntityManager.add(vehicle);
          LOGGER.info(String.format("Successfully added vehicle: %s", vehicle));
        }
      }
    } catch (Exception e) {
      LOGGER.error(String.format("Failed to handle request: %s", request));
      if (delete) {
        LOGGER.error(String.format("Exception thrown while deleting Vehicle: %s", vehicle), e);
        response.sendError(
            500, String.format("Internal Server Error: Deleting Vehicle %s failed. \n", vehicle));
      } else if (update) {
        LOGGER.error(String.format("Exception thrown while updating Vehicle: %s", vehicle), e);
        response.sendError(
            500, String.format("Internal Server Error: Updating Vehicle %s failed. \n", vehicle));
      } else {
        LOGGER.error(String.format("Exception thrown while adding Vehicle: %s", vehicle), e);
        response.sendError(
            500, String.format("Internal Server Error: Adding Vehicle %s failed. \n", vehicle));
      }
      vehicle = null;
    }

    response.setStatus(200);
    LOGGER.info(response.toString());

    // Redirect to vehicles.jsp
    request.getRequestDispatcher("/vehicles.jsp").forward(request, response);
  }