package eu.mrneznamy.mrultimatelibrary.database;

import org.bukkit.plugin.java.JavaPlugin;

import java.io.File;
import java.util.HashMap;
import java.util.Map;

/**
 * Database manager for plugins
 * Allows plugins to register and use their own databases
 */
public class MrLibDatabaseManager {
    
    private static final Map<String, MrLibDatabase> databases = new HashMap<>();
    
    /**
     * Register MySQL database for a plugin
     * 
     * @param pluginName Plugin identifier
     * @param host MySQL host
     * @param port MySQL port
     * @param database Database name
     * @param username Username
     * @param password Password
     * @return Database instance
     */
    public static MrLibDatabase registerMySQL(String pluginName, String host, int port, String database, String username, String password) {
        MrLibMySQL mysql = new MrLibMySQL(host, port, database, username, password);
        databases.put(pluginName.toLowerCase(), mysql);
        
        if (mysql.connect()) {
            return mysql;
        }
        return null;
    }
    
    /**
     * Register SQLite database for a plugin
     * 
     * @param plugin Plugin instance
     * @param fileName Database file name (e.g. "data.db")
     * @return Database instance
     */
    public static MrLibDatabase registerSQLite(JavaPlugin plugin, String fileName) {
        File dbFile = new File(plugin.getDataFolder(), fileName);
        MrLibSQLite sqlite = new MrLibSQLite(dbFile);
        databases.put(plugin.getName().toLowerCase(), sqlite);
        
        if (sqlite.connect()) {
            return sqlite;
        }
        return null;
    }
    
    /**
     * Get database for a plugin
     * 
     * @param pluginName Plugin name
     * @return Database instance or null
     */
    public static MrLibDatabase getDatabase(String pluginName) {
        return databases.get(pluginName.toLowerCase());
    }
    
    /**
     * Disconnect and remove database
     * 
     * @param pluginName Plugin name
     */
    public static void unregister(String pluginName) {
        MrLibDatabase db = databases.remove(pluginName.toLowerCase());
        if (db != null) {
            db.disconnect();
        }
    }
    
    /**
     * Disconnect all databases
     */
    public static void disconnectAll() {
        databases.values().forEach(MrLibDatabase::disconnect);
        databases.clear();
    }
}

