package com.xyw.console.asset.controller;

import com.xyw.console.asset.exception.DeviceAssetNotFoundException;
import com.xyw.console.asset.exception.DeviceAssetValidationException;
import com.xyw.console.common.ApiResponse;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.multipart.MaxUploadSizeExceededException;

/** 文件用途（白话）：把设备资产的业务异常转换成前端可读的统一 JSON 错误。 */
@RestControllerAdvice(assignableTypes = DeviceAssetController.class)
public class DeviceAssetExceptionHandler {
  /** 代码作用（白话）：把字段、图片和引用保护失败转为 400。关联文件：DeviceAssetService.java。关联逻辑（调用链/数据流）：Service 校验异常 -> Advice -> ApiResponse -> 前端提示。 */
  @ExceptionHandler(DeviceAssetValidationException.class) @ResponseStatus(HttpStatus.BAD_REQUEST)
  public ApiResponse<Void> validation(DeviceAssetValidationException exception) { return ApiResponse.error(400, exception.getMessage()); }
  /** 代码作用（白话）：把不存在的设备转为 404。关联文件：DeviceAssetService.java。关联逻辑（调用链/数据流）：Service 查无设备 -> Advice -> ApiResponse -> 前端提示。 */
  @ExceptionHandler(DeviceAssetNotFoundException.class) @ResponseStatus(HttpStatus.NOT_FOUND)
  public ApiResponse<Void> notFound(DeviceAssetNotFoundException exception) { return ApiResponse.error(404, exception.getMessage()); }
  /** 代码作用（白话）：把超过整个 multipart 请求限制的上传转为可读错误。关联文件：DeviceAssetController.java。关联逻辑（调用链/数据流）：浏览器上传 -> Spring 限制 -> Advice -> 前端提示。 */
  @ExceptionHandler(MaxUploadSizeExceededException.class) @ResponseStatus(HttpStatus.BAD_REQUEST)
  public ApiResponse<Void> uploadTooLarge(MaxUploadSizeExceededException exception) { return ApiResponse.error(400, "两张图片及表单总大小不能超过 42MB"); }
}
