// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.builtin.asseteditor.util;

import java.nio.file.Paths;
import javax.annotation.Nonnull;
import java.util.regex.Pattern;
import java.nio.file.Path;

public class AssetPathUtil
{
    public static final String UNIX_FILE_SEPARATOR = "/";
    public static final String FILE_EXTENSION_JSON = ".json";
    public static final String DIR_SERVER = "Server";
    public static final String DIR_COMMON = "Common";
    public static final Path PATH_DIR_COMMON;
    public static final Path PATH_DIR_SERVER;
    public static final Path EMPTY_PATH;
    private static final Pattern INVALID_FILENAME_CHAR_REGEX;
    private static final String[] RESERVED_NAMES;
    
    public static boolean isInvalidFileName(@Nonnull final Path path) {
        final String fileName = path.getFileName().toString();
        if (fileName.isEmpty()) {
            return true;
        }
        if (fileName.charAt(fileName.length() - 1) == '.') {
            return true;
        }
        int i = 0;
        while (i < fileName.length()) {
            final int codePoint = fileName.codePointAt(i);
            if (codePoint < 31) {
                return true;
            }
            switch (codePoint) {
                case 34:
                case 42:
                case 58:
                case 60:
                case 62:
                case 63:
                case 124: {
                    return true;
                }
                default: {
                    i += Character.charCount(codePoint);
                    continue;
                }
            }
        }
        final int pos = fileName.indexOf(46);
        if (pos == 0) {
            return false;
        }
        final String baseFileName = (pos < 0) ? fileName : fileName.substring(0, pos);
        for (final String str : AssetPathUtil.RESERVED_NAMES) {
            if (str.equals(baseFileName)) {
                return true;
            }
        }
        return false;
    }
    
    public static String removeInvalidFileNameChars(final String name) {
        return AssetPathUtil.INVALID_FILENAME_CHAR_REGEX.matcher(name).replaceAll("");
    }
    
    @Nonnull
    private static String getIdFromPath(@Nonnull final Path path) {
        final String fileName = path.getFileName().toString();
        final int extensionIndex = fileName.lastIndexOf(46);
        if (extensionIndex == -1) {
            return fileName;
        }
        return fileName.substring(0, extensionIndex);
    }
    
    static {
        PATH_DIR_COMMON = Paths.get("Common", new String[0]);
        PATH_DIR_SERVER = Paths.get("Server", new String[0]);
        EMPTY_PATH = Path.of("", new String[0]);
        INVALID_FILENAME_CHAR_REGEX = Pattern.compile("[<>:\"|?*/\\\\]");
        RESERVED_NAMES = new String[] { "CON", "PRN", "AUX", "NUL", "COM1", "COM2", "COM3", "COM4", "COM5", "COM6", "COM7", "COM8", "COM9", "LPT1", "LPT2", "LPT3", "LPT4", "LPT5", "LPT6", "LPT7", "LPT8", "LPT9" };
    }
}
