extends Node

const WINDOW_TITLE_INPUT = "GUI/Settings/Menus/TabContainer/Test/ScrollContainer/VBoxContainer/TitleBox/Title"

var character_name = "player"
var character_color = null
var character_gender = null
var character_slot = null

# BG loader
onready var progress_texture = $background_loader/center_container/texture_progress
var loader
var wait_frames
var time_max = 10 # msec
var current_scene = null
var old_scene = null
var parent_scene = null

func _ready():
    var root = get_tree().get_root()
#    current_scene = root.get_child(root.get_child_count() -1)
   
    change_title()
    get_tree().get_root().connect("size_changed", self, "on_window_size_changed")

#    change_level( "res://login_scene/login_scene.tscn", get_tree().get_root() )
########
#### change title ####
func on_window_size_changed():
    change_title()
    
func change_title():
    var title = "Khanat" 
        
    if has_node( WINDOW_TITLE_INPUT ):
        var title_node = get_node( WINDOW_TITLE_INPUT )
        if title_node and not title_node.text.strip_edges() == "":
            title = title_node.text.strip_edges()
            
    title += " (" + String(OS.get_window_size().x) + "x" + String(OS.get_window_size().y) + ")"
    OS.set_window_title( title )
########



########
#### change level
func unload_scene( scene ):
    print("unload_scene: "+str(scene.name))
    scene.queue_free()

func load_scene( scene_path ):
    print("load_scene: "+str(scene_path))
    loader = ResourceLoader.load_interactive( scene_path )
    if loader == null: # check for errors
        return false
    return true
    
func change_level( p_next_scene_path, p_parent_next_scene = null, p_old_scene = null ):
    character.hide()
    get_node("background_loader").show()
    
    print()
    print( "change_level: " )
    if p_old_scene:
        print( "from "+p_old_scene.name )
    print( "to "+str(p_next_scene_path) )
    if p_parent_next_scene:
        print( " on "+ str(p_parent_next_scene.name) )
    print()
        
    if not load_scene( p_next_scene_path ):
        show_error()
        return
    parent_scene = p_parent_next_scene
    old_scene = p_old_scene
    set_process(true)
    
    if old_scene:
        unload_scene( old_scene )
        
    
    
    wait_frames = 1

########

    
func _process( time ):
    if loader == null:
        # no need to process anymore
        set_process(false)
        return

    if wait_frames > 0: # wait for frames to let the "loading" animation to show up
        wait_frames -= 1
        return

    var t = OS.get_ticks_msec()
    while OS.get_ticks_msec() < t + time_max: # use "time_max" to control how much time we block this thread    
        # poll your loader
        var err = loader.poll()
#        update_progress()

        if err == ERR_FILE_EOF: # load finished
#            update_progress()
            var resource = loader.get_resource()
            loader = null
            set_new_scene( resource )
            break
        elif err == OK:
            update_progress()
            pass
        else: # error during loading
            show_error()
            loader = null
            break
            

func update_progress():
#    var progress_texture = get_node("background_loader/center_container/texture_progress")
    var progress = (float(loader.get_stage()) / loader.get_stage_count()) * progress_texture.max_value
    
    progress_texture.value = progress

    
func set_new_scene( scene_resource ):
#    var progress_texture = get_node("background_loader/center_container/texture_progress")
    
    progress_texture.value = 0
    
    var scene = scene_resource.instance()
#    current_scene = scene_resource.instance()
    if parent_scene:
        parent_scene.add_child(scene)
    else:
        get_tree().get_root().add_child(scene)
        
    if scene.has_node("start_position"):
        character.update( scene.get_node("start_position") )
    
    get_node("background_loader").hide()
    character.show()
    

func _on_login_scene_character_creation_finished():
    var config_file = ConfigFile.new()
    var err = config_file.load( "user://player.cfg" )
    if err:
        print("Error code when loading config file: ", err)

    config_file.set_value(str(global.character_slot), "name", global.character_name)
    config_file.set_value(str(global.character_slot), "color", global.character_color)
    
    config_file.save( "user://player.cfg" )
#    global.goto_scene_loading( "res://game_scene/game_scene.tscn" )
#    global.change_level( "res://game_scene/game_scene.tscn", null, get_tree().get_root().get_node("login_scene") )
#    global.change_level( "res://test_scene/test_scene.tscn", null, get_tree().get_root().get_node("login_scene") )
    global.change_level( "res://test_grid_map/test_grid_map.tscn", null, get_tree().get_root().get_node("login_scene") )
    
func _on_logout_button_pressed():
#    global.goto_scene_loading( "res://login_scene/login_scene.tscn" )
    global.change_level( "res://login_scene/login_scene.tscn", null, get_tree().get_root().get_node("game_scene") )
    get_tree().paused = false
########