package net.sourceforge.pain.tinylib;
import net.sourceforge.pain.*;
import net.sourceforge.pain.data.*;
import net.sourceforge.pain.db.*;
import net.sourceforge.pain.tinylib.data.*;
import net.sourceforge.pain.util.*;
import java.io.*;
public class TinyLibInitializer implements MudlibInitializer {
    String configDir;
    File plugins_config;
    public void readSetting(PropertiesReader props) {
        configDir = props.get("tinylib.etc_dir");
        final String plugFile = configDir + "/plugins.cfg";
        plugins_config = new File(plugFile);
        if (!plugins_config.exists() || plugins_config.isDirectory() || !plugins_config.canRead()) {
            throw new RuntimeException("plugins startup file not found:" + plugFile);
        }
    }
    public void init() throws Exception {
        Mudlib.CONFIG_DIR = configDir;
        loadWorld();
        checkSafeShutdown();
        Codebase.getPluginManager().loadPluginsFromFile(plugins_config);
    }
    private static void loadWorld() throws Exception {
        PainDB db = Codebase.getDB();
        CodebaseData data = Codebase.getCodebaseData();
        Log.info("loading World");
        World world = (World) data.getMudLibRoot();
        if (world == null) {
            Log.debug("Non inited database detected!, creating world!");
            world = new World(db);
            data.setMudLibRoot(world);
            Mudlib.setWorld(world);
            Codebase.processEvent("deploy.CreateInitialWorldEvent", null);
            Log.debug("World Created!");
        } else {
            Log.info("World instance found");
            Mudlib.setWorld(world);
        }
        Log.info("flushing all startup fixes");
        db.flush();
        Log.info("Flushed OK!");
    }
    private static void checkSafeShutdown() throws Exception {
        Codebase.processEvent("CheckSafeShutdown", null);
    }
}