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

package com.hypixel.hytale.builtin.instances.command;

import java.nio.file.Path;
import com.hypixel.hytale.assetstore.AssetPack;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.attribute.FileAttribute;
import com.hypixel.hytale.server.core.universe.world.WorldConfig;
import com.hypixel.hytale.server.core.Message;
import com.hypixel.hytale.server.core.asset.AssetModule;
import java.util.concurrent.CompletableFuture;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.command.system.CommandContext;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgumentType;
import com.hypixel.hytale.server.core.command.system.arguments.types.ArgTypes;
import com.hypixel.hytale.server.core.command.system.arguments.system.OptionalArg;
import com.hypixel.hytale.server.core.command.system.arguments.system.RequiredArg;
import com.hypixel.hytale.server.core.command.system.basecommands.AbstractAsyncCommand;

public class InstanceEditNewCommand extends AbstractAsyncCommand
{
    private final RequiredArg<String> instanceNameArg;
    private final OptionalArg<String> packName;
    
    public InstanceEditNewCommand() {
        super("new", "server.commands.instances.edit.new.desc");
        this.instanceNameArg = this.withRequiredArg("instanceName", "server.commands.instances.edit.arg.name", ArgTypes.STRING);
        this.packName = this.withOptionalArg("pack", "server.commands.instances.edit.arg.packName", ArgTypes.STRING);
    }
    
    @Nonnull
    public CompletableFuture<Void> executeAsync(@Nonnull final CommandContext context) {
        if (AssetModule.get().getBaseAssetPack().isImmutable()) {
            context.sendMessage(Message.translation("server.commands.instances.edit.assetsImmutable"));
            return CompletableFuture.completedFuture((Void)null);
        }
        final String packId = this.packName.get(context);
        AssetPack pack;
        if (packId != null) {
            pack = AssetModule.get().getAssetPack(packId);
            if (pack == null) {
                throw new IllegalArgumentException("Unknown asset pack: " + packId);
            }
        }
        else {
            pack = AssetModule.get().getBaseAssetPack();
        }
        final String name = this.instanceNameArg.get(context);
        final Path path = pack.getRoot().resolve("Server").resolve("Instances").resolve(name);
        final WorldConfig defaultConfig = new WorldConfig();
        try {
            Files.createDirectories(path, (FileAttribute<?>[])new FileAttribute[0]);
        }
        catch (final IOException e) {
            context.sendMessage(Message.translation("server.commands.instances.createDirectory.failed").param("errormsg", e.getMessage()));
            return CompletableFuture.completedFuture((Void)null);
        }
        return WorldConfig.save(path.resolve("instance.bson"), defaultConfig).thenRun(() -> context.sendMessage(Message.translation("server.commands.instances.createdInstanceAssetConfig").param("name", name)));
    }
}
