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

package com.hypixel.hytale.builtin.adventure.shop;

import java.util.logging.Level;
import com.hypixel.hytale.builtin.adventure.shop.barter.BarterShopState;
import com.hypixel.hytale.server.core.modules.interaction.interaction.config.server.OpenCustomUIInteraction;
import com.hypixel.hytale.server.core.entity.entities.player.pages.choices.ChoiceInteraction;
import com.hypixel.hytale.codec.builder.BuilderCodec;
import com.hypixel.hytale.codec.lookup.StringCodecMapCodec;
import com.hypixel.hytale.server.core.entity.entities.player.pages.choices.ChoiceElement;
import com.hypixel.hytale.builtin.adventure.shop.barter.BarterShopAsset;
import com.hypixel.hytale.server.core.asset.type.item.config.Item;
import java.util.function.Function;
import com.hypixel.hytale.assetstore.codec.AssetCodec;
import com.hypixel.hytale.assetstore.map.DefaultAssetMap;
import com.hypixel.hytale.assetstore.AssetStore;
import com.hypixel.hytale.server.core.asset.HytaleAssetStore;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.plugin.JavaPluginInit;
import com.hypixel.hytale.server.core.plugin.JavaPlugin;

public class ShopPlugin extends JavaPlugin
{
    protected static ShopPlugin instance;
    
    public static ShopPlugin get() {
        return ShopPlugin.instance;
    }
    
    public ShopPlugin(@Nonnull final JavaPluginInit init) {
        super(init);
    }
    
    @Override
    protected void setup() {
        ShopPlugin.instance = this;
        this.getAssetRegistry().register(((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(ShopAsset.class, new DefaultAssetMap()).setPath()).setCodec(ShopAsset.CODEC)).setKeyFunction(ShopAsset::getId).loadsAfter(Item.class)).build());
        this.getAssetRegistry().register(((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)((HytaleAssetStore.Builder)HytaleAssetStore.builder(BarterShopAsset.class, new DefaultAssetMap()).setPath()).setCodec(BarterShopAsset.CODEC)).setKeyFunction(BarterShopAsset::getId).loadsAfter(Item.class)).build());
        this.getCodecRegistry((StringCodecMapCodec<Object, BuilderCodec<ShopElement>>)ChoiceElement.CODEC).register("ShopElement", ShopElement.class, ShopElement.CODEC);
        this.getCodecRegistry((StringCodecMapCodec<Object, BuilderCodec<GiveItemInteraction>>)ChoiceInteraction.CODEC).register("GiveItem", GiveItemInteraction.class, GiveItemInteraction.CODEC);
        this.getCodecRegistry((StringCodecMapCodec<Object, BuilderCodec<ShopPageSupplier>>)OpenCustomUIInteraction.PAGE_CODEC).register("Shop", ShopPageSupplier.class, ShopPageSupplier.CODEC);
    }
    
    @Override
    protected void start() {
        BarterShopState.initialize(this.getDataDirectory());
        this.getLogger().at(Level.INFO).log("Barter shop state initialized");
    }
    
    @Override
    protected void shutdown() {
        BarterShopState.shutdown();
        this.getLogger().at(Level.INFO).log("Barter shop state saved");
    }
}
