tool
extends Control

onready var FileList = $FileList

onready var TextEditor = $Container/Editor/TextEditor
onready var Filename = $Container/Editor/TopBar/Filename
onready var CloseFile = $Container/Editor/TopBar/close_btn
onready var Editor = $Container/Editor

onready var OpenFile = $Container/Buttons/openfile_btn
onready var NewFile = $Container/Buttons/newfile_btn
onready var DeleteFile = $Container/Buttons/deletefile_btn

onready var SaveFile = $Container/Editor/EditorButtons/savefile_btn
onready var SaveFileAs = $Container/Editor/EditorButtons/savefileas_btn

onready var ReadOnly = $Container/Editor/TopBar/Readonly

var DIRECTORY : String = "res://"
var EXCEPTIONS : String = "addons"
var EXTENSIONS : PoolStringArray = [
"*.txt ; Plain Text File", 
"*.rtf ; Rich Text Format File", 
"*.log ; Log File", 
"*.md ; MD File",
"*.doc ; WordPad Document",
"*.doc ; Microsoft Word Document",
"*.docm ; Word Open XML Macro-Enabled Document",
"*.docx ; Microsoft Word Open XML Document",
"*.bbs ; Bulletin Board System Text",
]

var directories = []
var files = []

# -----
var current_file : File = File.new()
var current_path : String = ""
var current_content : String = ""
# -----

func _ready():
	OpenFile.connect("pressed",self,"open_selected_file")
	NewFile.connect("pressed",self,"create_new_file")
	DeleteFile.connect("pressed",self,"delete_selected_file")
	
	SaveFile.connect("pressed",self,"save_file")
	SaveFileAs.connect("pressed",self,"save_file_as")
	
	CloseFile.connect("pressed",self,"close_editor")
	
	Filename.set_editable(false)
	SaveFile.set_disabled(true)
	
	FileList.set_filters(EXTENSIONS)
	
	Editor.hide()

func close_editor():
	Editor.hide()
	Filename.set_text("")
	TextEditor.set_text("")
	current_file.close()
	current_file = File.new()
	current_path = ""
	current_content = ""

func clear_editor():
	TextEditor.set_text("")
	Filename.set_text("")
	current_file = File.new()

func create_new_file():
	close_editor()
	SaveFile.set_disabled(true)
	Editor.show()

func open_filelist():
	FileList.update()
	FileList.popup()
	FileList.set_position(OS.get_screen_size()/2 - FileList.get_size()/2)

func save_file_as():
	current_content = TextEditor.get_text()
	FileList.mode = FileDialog.MODE_SAVE_FILE
	FileList.set_title("Save this file as...")
	if FileList.is_connected("file_selected",self,"delete_file"):
		FileList.disconnect("file_selected",self,"delete_file")
	if not FileList.is_connected("file_selected",self,"open_file"):
		FileList.connect("file_selected",self,"open_file",[current_content])
	else:
		FileList.disconnect("file_selected",self,"open_file")
		FileList.connect("file_selected",self,"open_file",[current_content])
	open_filelist()

func open_selected_file():
	clear_editor()
	FileList.mode = FileDialog.MODE_OPEN_FILE
	FileList.set_title("Select a file you want to edit")
	if FileList.is_connected("file_selected",self,"delete_file"):
		FileList.disconnect("file_selected",self,"delete_file")
	if not FileList.is_connected("file_selected",self,"open_file"):
		FileList.connect("file_selected",self,"open_file",[""])
	else:
		FileList.disconnect("file_selected",self,"open_file")
		FileList.connect("file_selected",self,"open_file",[""])
	open_filelist()

func delete_selected_file():
	FileList.mode = FileDialog.MODE_OPEN_FILE
	FileList.set_title("Select a file you want to delete")
	if FileList.is_connected("file_selected",self,"open_file"):
		FileList.disconnect("file_selected",self,"open_file")
	if not FileList.is_connected("file_selected",self,"delete_file"):
		FileList.connect("file_selected",self,"delete_file")
	else:
		FileList.disconnect("file_selected",self,"delete_file")
		FileList.connect("file_selected",self,"delete_file")
	open_filelist()

func open_file(path : String, content_file : String):
	var content = ""
	if content_file == "" or content_file == null:
		current_file.open(path,File.READ)
		content = current_file.get_as_text()
	else:
		content = content_file
		current_file.open(path,File.WRITE)
		current_file.store_line(content)
	
	TextEditor.set_text(content)
	Filename.set_text(path)
	
	current_file.close()
	
	current_path = path
	current_content = content
	
	Editor.show()
	SaveFile.set_disabled(false)

func save_file():
	if current_path == "" or current_path == null:
		save_file_as()
	else:
		current_file.open(current_path,File.WRITE)
		current_content = TextEditor.get_text()
		if current_content == null:
			current_content = ""
		current_file.store_line(current_content)
		current_file.close()

func delete_file(path : String):
	clear_editor()
	var dir = Directory.new()
	dir.remove(path)

func _on_Readonly_toggled(button_pressed):
	if button_pressed:
		ReadOnly.set_text("Read Only")
		TextEditor.readonly = (true)
	else:
		ReadOnly.set_text("Can Edit")
		TextEditor.readonly = (false)