package com.kexue.skills.entity;

import lombok.Data;

import java.io.Serializable;
import java.time.Instant;
import java.util.Map;

/**
 * 日志记录对象
 * 用于在拦截器和持久层之间传递日志数据
 * 
 * @author 王志维
 * @since 2026-04-14
 */
@Data
public class LogRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    
    /**
     * 模块名称
     */
    private String module;
    
    /**
     * 日志描述
     */
    private String description;
    
    /**
     * 请求信息
     */
    private LogRequest request;
    
    /**
     * 响应信息
     */
    private LogResponse response;
    
    /**
     * 执行耗时（毫秒）
     */
    private Long timeTaken;
    
    /**
     * 时间戳
     */
    private Instant timestamp;
    
    /**
     * 日志请求对象
     */
    @Data
    public static class LogRequest implements Serializable {
        private static final long serialVersionUID = 1L;
        
        /**
         * 请求方法（GET、POST等）
         */
        private String method;
        
        /**
         * 请求URL
         */
        private String url;
        
        /**
         * 请求头
         */
        private Map<String, String> headers;
        
        /**
         * 请求体
         */
        private String body;
        
        /**
         * 客户端IP
         */
        private String ip;
        
        /**
         * IP归属地
         */
        private String address;
        
        /**
         * 浏览器信息
         */
        private String browser;
        
        /**
         * 操作系统
         */
        private String os;
    }
    
    /**
     * 日志响应对象
     */
    @Data
    public static class LogResponse implements Serializable {
        private static final long serialVersionUID = 1L;
        
        /**
         * 响应头
         */
        private Map<String, String> headers;
        
        /**
         * 响应体
         */
        private String body;
        
        /**
         * 状态码
         */
        private Integer status;
    }
}
