package com.tashow.cloud.infraapi.api.file;

import com.tashow.cloud.common.pojo.CommonResult;
import com.tashow.cloud.infraapi.api.file.dto.FileCreateReqDTO;
import com.tashow.cloud.infraapi.enums.ApiConstants;
import jakarta.validation.Valid;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient(name = ApiConstants.NAME) // TODO 芋艿：fallbackFactory =
/** RPC 服务 - 文件 */
public interface FileApi {

  String PREFIX = ApiConstants.PREFIX + "/file";

  /**
   * 保存文件，并返回文件的访问路径
   *
   * @param content 文件内容
   * @return 文件路径
   */
  default String createFile(byte[] content) {
    return createFile(null, null, content);
  }

  /**
   * 保存文件，并返回文件的访问路径
   *
   * @param path 文件路径
   * @param content 文件内容
   * @return 文件路径
   */
  default String createFile(String path, byte[] content) {
    return createFile(null, path, content);
  }

  /**
   * 保存文件，并返回文件的访问路径
   *
   * @param name 原文件名称
   * @param path 文件路径
   * @param content 文件内容
   * @return 文件路径
   */
  default String createFile(
      @RequestParam("name") String name,
      @RequestParam("path") String path,
      @RequestParam("content") byte[] content) {
    return createFile(new FileCreateReqDTO().setName(name).setPath(path).setContent(content))
        .getCheckedData();
  }

  @PostMapping(PREFIX + "/create")
  /** 保存文件，并返回文件的访问路径 */
  CommonResult<String> createFile(@Valid @RequestBody FileCreateReqDTO createReqDTO);
}
