package com.ruoyi.file.domain;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.io.File;
import java.net.URL;
import java.time.LocalDateTime;

@Data
@TableName("file_update_info")
public class FileUpdateInfo {
    private Long id;
    private String fileName; // 文件名
    private String fileMd5;
    private String remoteMd5;

    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    private int updateStatus;    // 0表示无需更新，1表示待更新

    // 新增版本号字段
    @TableField(fill = FieldFill.INSERT)
    private String version = "v1.0.0"; // 默认版本号

    // 新增运行状态字段
    private int fileStatus; // 0：未知，1：运行中，2：已停止

    // 获取带版本号的文件名
//    @JsonIgnore // 忽略该字段的序列化
//    public String getVersionedFileName() {
//        return fileName.substring(0, fileName.lastIndexOf('.')) + "-" + version + fileName.substring(fileName.lastIndexOf('.'));
//    }

    // 获取文件完整路径（基于 JAR 文件所在的目录）
    @JsonIgnore // 忽略该字段的序列化
    public String getFilePath() {
        return getServiceDir() + File.separator + fileName;
    }

    // 动态获取 JAR 文件所在的目录
    public static String getServiceDir() {
        try {
            // 获取当前类的 ClassLoader
            ClassLoader classLoader = FileUpdateInfo.class.getClassLoader();
            // 获取当前类的资源路径（例如 JAR 文件路径）
            URL url = classLoader.getResource(FileUpdateInfo.class.getName().replace('.', '/') + ".class");
            if (url != null && "jar".equals(url.getProtocol())) {
                // 从 JAR 文件中获取路径
                String jarPath = url.getPath();
                // 去掉 JAR 文件内部路径部分
                int bangIndex = jarPath.indexOf("!/");
                if (bangIndex > 0) {
                    jarPath = jarPath.substring(0, bangIndex);
                }
                // 去掉 "file:" 前缀
                if (jarPath.startsWith("file:")) {
                    jarPath = jarPath.substring(5);
                }
                // 获取 JAR 文件所在的目录
                return new java.io.File(jarPath).getParent();
            } else if (url != null && "file".equals(url.getProtocol())) {
                // 如果是直接运行的文件路径
                String filePath = url.getPath();
                return new java.io.File(filePath).getParent();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return System.getProperty("user.dir"); // 如果无法获取 JAR 路径，退回到当前工作目录
    }
}