--[[
	Bongos\core\profiles.lua
		Code for saving and loading Bongos Settings
--]]

local savedList = {};

BProfile = {
	Load = function(name)
		if not BongosProfiles then
			BMsg("No profiles saved yet.");
		elseif not name then
			BMsg("No profile name specified.");
		elseif not BongosProfiles[name] then
			BMsg("'" .. (name or "null") .. "' is an invalid profile.");
		else
			BBar.ForAllIDs(BBar.Delete);
			for field, value in pairs(BongosProfiles[name]) do
				setfield(field, tcopy(value));
				local action = savedList[name];
				if action and not tonumber(action) then
					action();
				end
			end
			BScript.CallStartup();
			
			BMsg("Loaded profile '" .. name .. "'.");
		end
	end,
	
	Save = function(name)
		if not BongosProfiles then
			BongosProfiles = {};
		end
		BongosProfiles[name] = {};
		
		--save all bar and position information
		for _, bar in pairs(BBar.GetAll()) do
			BongosProfiles[name][bar.setsGlobal] = tcopy(bar.sets) or {};
			BongosProfiles[name][bar.setsGlobal].x = bar:GetLeft();
			BongosProfiles[name][bar.setsGlobal].y = bar:GetTop();
			local scale = bar:GetScale();
			if scale == 1 then
				scale = nil;
			end
			BongosProfiles[name][bar.setsGlobal].scale = scale;
		end
		for var in savedList do
			BongosProfiles[name][var] = tcopy(getfield(var));
		end

		BMsg("Saved your current configuration as the profile '" .. name .. "'.");
	end,

	Delete = function(name)
		if not BongosProfiles then
			BMsg("No profiles saved yet.");
		elseif(not name) then
			BMsg("No profile specified.");
		elseif not BongosProfiles[name] then
			BMsg("'" .. (name or "null") .. "' is an invalid profile.");
		else
			BongosProfiles[name] = nil;
			BMsg("Deleted profile '" .. name .. "'.");
		end
	end,

	SetDefault = function(name)
		if not name then
			if BongosProfiles then
				BongosProfiles.default = nil;
				BMsg("Default profile disabled.");
			end
		elseif BongosProfiles and BongosProfiles[name] then
			BongosProfiles.default = name;
			BMsg("'" .. name .. "' has been set as the default Bongos profile.");
		else
			BMsg("Invalid profile name.");
		end
	end,
	
	GetDefault = function()
		if BongosProfiles then
			return BongosProfiles.default;
		end
	end,
	
	RegisterForSave = function(varName, loadAction)
		if not savedList[varName] then
			savedList[varName] = (loadAction or 1);
		end
	end,
	
	GetDefaultValue = function(varName)
		if not (varName and BongosProfiles and BongosProfiles.default and BongosProfiles[BongosProfiles.default]) then
			return nil;
		end
		local defaults = BongosProfiles[BongosProfiles.default][varName];
		if defaults then
			return tcopy(defaults);
		end
	end,
}