package com.emoon.tongue.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.servlet.resource.NoResourceFoundException;

import jakarta.servlet.http.HttpServletRequest;

/**
 * Web资源异常处理器
 * 用于忽略浏览器自动发起的常见资源请求（如favicon.ico、.well-known等）
 *
 * @author system
 * @date 2025-12-24
 */
@Slf4j
@ControllerAdvice
@Order(1) // 优先级高于GlobalExceptionHandler
public class WebResourceExceptionHandler {

    /**
     * 忽略常见的浏览器自动请求资源
     */
    @ExceptionHandler(NoResourceFoundException.class)
    public ResponseEntity<Void> handleNoResourceFoundException(NoResourceFoundException e, HttpServletRequest request) {
        String requestURI = request.getRequestURI();
        
        // 忽略浏览器自动请求的常见资源
        if (isIgnoredResource(requestURI)) {
            // 使用debug级别，不记录ERROR日志
            log.debug("忽略浏览器自动请求的资源: {}", requestURI);
            // 返回204 No Content，静默处理
            return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
        }
        
        // 其他资源请求返回null，让GlobalExceptionHandler继续处理
        return null;
    }

    /**
     * 判断是否为需要忽略的资源请求
     */
    private boolean isIgnoredResource(String requestURI) {
        if (requestURI == null) {
            return false;
        }
        
        // 忽略的路径列表
        return requestURI.equals("/favicon.ico")
                || requestURI.startsWith("/.well-known/")
                || requestURI.startsWith("/apple-touch-icon")
                || requestURI.startsWith("/robots.txt")
                || requestURI.startsWith("/sitemap.xml");
    }
}
