package com.yfd.platform.modules.experimentalData.enums;

import ch.qos.logback.core.status.Status;
import io.netty.handler.codec.compression.CompressionException;
import lombok.AllArgsConstructor;
import lombok.Getter;

import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;
/**
 * 支持的压缩格式枚举
 * - ZIP: 标准ZIP格式
 * - TAR: 未压缩的TAR归档
 * - TAR_GZ: GZIP压缩的TAR归档
 * - TAR_BZ2: BZIP2压缩的TAR归档
 * - TAR_XZ: XZ压缩的TAR归档
 */
@Getter
@AllArgsConstructor
public enum CompressionFormat {
    ZIP("zip"),
    TAR_GZ("tar.gz", "tgz"),
    SEVEN_ZIP("7z");

    private final Set<String> aliases = new HashSet<>();

    CompressionFormat(String... aliases) {
        Collections.addAll(this.aliases, aliases);
    }

    /**
     * 从字符串转换压缩格式
     * @param formatStr 格式字符串（不区分大小写）
     * @return 对应的枚举值
     * @throws IllegalArgumentException 格式不支持时抛出
     */
    public static CompressionFormat fromString(String formatStr) {
        String normalized = formatStr.toLowerCase().trim();
        for (CompressionFormat format : values()) {
            if (format.aliases.contains(normalized)) {
                return format;
            }
        }
        throw new IllegalArgumentException("不支持的压缩格式: " + formatStr
                + "，支持格式: " + getSupportedFormats());
    }

    /**
     * 获取支持格式列表
     * @return 格式列表字符串（逗号分隔）
     */
    public static String getSupportedFormats() {
        return Arrays.stream(values())
                .map(f -> String.join("|", f.aliases))
                .collect(Collectors.joining(", "));
    }

    /**
     * 获取主扩展名
     */
    public String getPrimaryExtension() {
        return aliases.iterator().next();
    }
}

