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

package com.hypixel.hytale.server.migrations;

import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
import java.io.IOException;
import com.hypixel.hytale.sneakythrow.SneakyThrow;
import java.nio.file.Files;
import java.util.HashMap;
import com.hypixel.hytale.assetstore.JsonAsset;
import com.hypixel.hytale.codec.validation.ValidationResults;
import java.util.function.Function;
import com.hypixel.hytale.codec.ExtraInfo;
import com.hypixel.hytale.assetstore.AssetValidationResults;
import java.nio.file.Path;
import com.hypixel.hytale.server.spawning.assets.spawnmarker.config.SpawnMarker;
import java.util.Map;
import javax.annotation.Nonnull;
import com.hypixel.hytale.logger.HytaleLogger;
import com.hypixel.hytale.server.spawning.spawnmarkers.SpawnMarkerEntity;
import com.hypixel.hytale.server.core.modules.migrations.EntityMigration;

public class RenameSpawnMarkerMigration extends EntityMigration<SpawnMarkerEntity>
{
    @Nonnull
    public static HytaleLogger LOGGER;
    @Nonnull
    private Map<String, SpawnMarker> idMigrations;
    
    public RenameSpawnMarkerMigration(@Nonnull final Path filePath) {
        super(SpawnMarkerEntity.class, version -> {
            final ExtraInfo extraInfo = new ExtraInfo(version, (Function<ExtraInfo, ValidationResults>)AssetValidationResults::new);
            ((AssetValidationResults)extraInfo.getValidationResults()).disableMissingAssetFor(SpawnMarker.class);
            return extraInfo;
        });
        this.idMigrations = new HashMap<String, SpawnMarker>();
        List<String> lines;
        try {
            lines = Files.readAllLines(filePath);
        }
        catch (final IOException e) {
            throw SneakyThrow.sneakyThrow(e);
        }
        for (final String line : lines) {
            final String[] split = line.split(":");
            if (split.length != 2) {
                continue;
            }
            final String spawnMarkerMigrationId = split[1];
            final SpawnMarker spawnMarker = SpawnMarker.getAssetMap().getAsset(spawnMarkerMigrationId);
            if (spawnMarker == null) {
                RenameSpawnMarkerMigration.LOGGER.at(Level.WARNING).log("SpawnMarker '%s' does not exist!", spawnMarkerMigrationId);
            }
            else {
                this.idMigrations.put(split[0], spawnMarker);
            }
        }
    }
    
    @Override
    protected boolean migrate(@Nonnull final SpawnMarkerEntity entity) {
        final String spawnMarkerId = entity.getSpawnMarkerId();
        final SpawnMarker spawnMarker = this.idMigrations.get(spawnMarkerId);
        if (spawnMarker == null) {
            return false;
        }
        entity.setSpawnMarker(spawnMarker);
        return true;
    }
    
    static {
        RenameSpawnMarkerMigration.LOGGER = HytaleLogger.forEnclosingClass();
    }
}
