@tool
class_name GodotSteamPlugin
extends EditorPlugin

const EDITOR_PANEL = preload("uid://cyniebd6yahu5")

static var dock_frame

var link_changelog: String = "[url=https://godotsteam.com/changelog/gdextension/]changelog[/url]"
var link_website: String = "[url=https://godotsteam.com]website[/url]"
var steamworks_dock: Control


## Used specifically to add/remove additional dock content
static func get_dock_frame() -> Control:
	return dock_frame


func _enable_plugin() -> void:
	print("GodotSteam GDExtension updater functionality enabled")


func _disable_plugin() -> void:
	print("GodotSteam GDEXtension updater functionality disabled")


func _enter_tree() -> void:
	print_rich("GodotSteam v%s | %s | %s" % [Steam.get_godotsteam_version(), link_website, link_changelog])
	add_project_settings()
	add_steamworks_dock()


func _exit_tree() -> void:
	remove_steamworks_dock()


func _make_visible(visible) -> void:
	if steamworks_dock:
		steamworks_dock.set_visible(visible)


#region Add and remove things
func add_project_settings() -> void:
	# Used for the Updater looking for redist files and SteamCMD
	if not ProjectSettings.has_setting("steam/updates/godotsteam/check_for_updates"):
		ProjectSettings.set_setting("steam/updates/godotsteam/check_for_updates", true)
	ProjectSettings.add_property_info({
		"name": "steam/updates/godotsteam/check_for_updates",
		"type": TYPE_BOOL
	})
	ProjectSettings.set_initial_value("steam/updates/godotsteam/check_for_updates", true)
	ProjectSettings.set_as_basic("steam/updates/godotsteam/check_for_updates", true)
	# Which channel of updates to pull from
	# Sponsors repo should require the user to have access to that repository already
	# In theory, they can connect via SSH?
	if not ProjectSettings.has_setting("steam/updates/godotsteam/update_channel"):
		ProjectSettings.set_setting("steam/updates/godotsteam/update_channel", 0)
	ProjectSettings.add_property_info({
		"name": "steam/updates/godotsteam/update_channel",
		"type": TYPE_INT,
		"hint": PROPERTY_HINT_ENUM,
		"hint_string": "Community, Sponsors"
	})
	ProjectSettings.set_initial_value("steam/updates/godotsteam/update_channel", 0)
	ProjectSettings.set_as_basic("steam/updates/godotsteam/update_channel", true)


func add_steamworks_dock() -> void:
	steamworks_dock = EDITOR_PANEL.instantiate()
	# This will be used when 4.4.x is deprecated
	#add_control_to_dock(DockSlot.DOCK_SLOT_BOTTOM, steamworks_dock)
	# This is deprecated as of 4.6; when it is removed then 4.4.x will be deprecated for GodotSteam
	add_control_to_bottom_panel(steamworks_dock, "Steamworks")
	dock_frame = steamworks_dock


func remove_steamworks_dock() -> void:
	# This will be used when 4.4.x is deprecated
	#remove_control_from_docks(steamworks_dock)
	# This is deprecated as of 4.6; when it is removed then 4.4.x will be deprecated for GodotSteam
	remove_control_from_bottom_panel(steamworks_dock)
	steamworks_dock.queue_free()
	steamworks_dock = null
	dock_frame = null
#endregion
