package com.xvji.utils;

import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

/**
 * 自动将 Map 转换为 form-data 格式发送请求的工具类
 */
public class FormDataHttpUtil {

    // 注入你项目中已有的 RestTemplate（如果是 Spring 环境，建议用 @Autowired 注入）
    private static RestTemplate restTemplate = new RestTemplate();

    // 如果你用的是 Spring 框架，建议用构造器注入 RestTemplate（更符合 Spring 规范）
    public FormDataHttpUtil(RestTemplate restTemplate) {
        FormDataHttpUtil.restTemplate = restTemplate;
    }

    /**
     * 发送 form-data 格式的 POST 请求
     * @param url 接口地址
     * @param params 原有 Map 格式的参数（无需修改）
     * @return 接口返回结果
     */
    public static ResponseEntity<String> postFormData(String url, Map<String, Object> params) {
        // 1. 创建 form-data 格式的参数容器
        MultiValueMap<String, Object> formData = new LinkedMultiValueMap<>();

        // 2. 将原有 Map 中的参数逐个添加到 form-data 中
        for (Map.Entry<String, Object> entry : params.entrySet()) {
            String key = entry.getKey();
            Object value = entry.getValue();
            // 注意：如果 value 是 null，可能需要处理
            if (value != null) {
                formData.add(key, value.toString()); // 转为字符串，兼容大多数接口
            }
        }

        // 3. 设置请求头为 form-data 格式
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);

        // 4. 包装请求体和头信息
        HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(formData, headers);

        // 5. 发送请求（复用原有 RestTemplate）
        return restTemplate.postForEntity(url, requestEntity, String.class);
    }
}