package com.airlock.iam.common.infrastructure.request;

import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletRequestWrapper;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

public class FormParamHttpServletRequestWrapper extends HttpServletRequestWrapper {
   private final Map<String, List<String>> formParams;

   public FormParamHttpServletRequestWrapper(HttpServletRequest request, Map<String, List<String>> formParams) {
      super(request);
      this.formParams = formParams;
   }

   public Map<String, String[]> getParameterMap() {
      Map<String, String[]> map = new HashMap<>();

      for (Entry<String, List<String>> entry : this.formParams.entrySet()) {
         map.put(entry.getKey(), entry.getValue().toArray(String[]::new));
      }

      return map;
   }

   public String getParameter(String name) {
      return this.formParams.containsKey(name) ? this.formParams.get(name).getFirst() : null;
   }

   @SuppressFBWarnings(value = "PZLA_PREFER_ZERO_LENGTH_ARRAYS", justification = "API mandates returning null")
   public String[] getParameterValues(String name) {
      return this.formParams.containsKey(name) ? this.formParams.get(name).toArray(String[]::new) : null;
   }

   public Enumeration<String> getParameterNames() {
      return Collections.enumeration(this.formParams.keySet());
   }
}
