class_name SaveManager
extends Node

var file: ConfigFile = ConfigFile.new()
var save_path: String = "user://save.binary"

func save(res: SaveFile) -> bool:
	if not is_instance_valid(res):
		push_error("cannot save: invalid resource")
		return false
	
	if FileAccess.file_exists(save_path) and file.load(save_path) != OK:
		printerr("Save file corrupted!")
		return false
	
	file.set_value("meta", "savedate", Time.get_datetime_string_from_system())
	
	for property in res.get_property_list():
		if property.usage & PROPERTY_USAGE_STORAGE:
			var v_name: String = property.name
			file.set_value(res.save_name, v_name, res.get(v_name))
	
	return file.save(save_path) == OK

func load(res: SaveFile) -> bool:
	if not FileAccess.file_exists(save_path):
		return true
	if file.load(save_path) != OK:
		printerr("Save file corrupted!")
		return false
		
	var props := []
	for p in res.get_property_list():
		if p.usage & PROPERTY_USAGE_STORAGE:
			props.append(p.name)
	
	for key in file.get_section_keys(res.save_name):
		if key in props:
			res.set(key, file.get_value(res.save_name, key))
	return true

func delete() -> void:
	file.clear()
	file.save(save_path)
