# ----------------------------------------------
#            ~{ GitHub Integration }~
# [Author] Nicolò "fenix" Santilio 
# [github] fenix-hub/godot-engine.github-integration
# [version] 0.2.9
# [date] 09.13.2019



# -----------------------------------------------

tool
extends Control


onready var gitignore = $VBoxContainer/HBoxContainer5/gitignore
onready var privacy = $VBoxContainer/HBoxContainer3/privacy
onready var readme = $VBoxContainer/HBoxContainer4/readme
onready var license = $VBoxContainer/HBoxContainer6/license
onready var nome = $VBoxContainer/HBoxContainer/nome
onready var descrizione = $VBoxContainer/HBoxContainer2/descrizione

enum REQUESTS { REPOS = 0, GISTS = 1, END = -1 }
var requesting
var new_repo = HTTPRequest.new()
var repo_body

var LICENSES = ["afl-3.0","apache-2.0","artistic-2.0","bsl-1.0","bsd-2-clause","bsd-3-clause","bsd-3-clause-clear","cc","cc0-1.0","cc-by-4.0","cc-by-sa-4.0","wtfpl","ecl-2.0","epl-1.0","eupl-1.1",
"agpl-3.0","gpl","gpl-2.0","gpl-3.0","lgpl","lgpl-2.1","lgpl-3.0","isc","lppl-1.3c","ms-pl","mit","mpl-2.0","osl-3.0","postgresql","ofl-1.1","ncsa","unlicense","zlib"]

#var GITIGNORE = ["Haskell","Godot"]

onready var error = $VBoxContainer/error

func _ready():
    call_deferred("add_child",new_repo)
    new_repo.connect("request_completed",self,"request_completed")
    gitignore.select(0)
    license.select(0)
    error.hide()
    load_metadata()

func load_metadata():
    for l in range(0,license.get_item_count()):
        license.set_item_metadata(l,LICENSES[l])
#	for g in range(0,gitignore.get_item_count()):
#		gitignore.set_item_metadata(g,GITIGNORE[g])

func request_completed(result, response_code, headers, body ):
    if result == 0:
        match requesting:
            REQUESTS.REPOS:
                if response_code == 201:
                    hide()
                    get_parent().print_debug_message("created new repository...")
                    get_parent().UserPanel.request_repositories(get_parent().UserPanel.REQUESTS.UP_REPOS)
                    get_parent().loading(false)
                elif response_code == 422:
                    error.text = "Error: "+JSON.parse(body.get_string_from_utf8()).result.errors[0].message
                    error.show()
            REQUESTS.GISTS:
                if response_code == 200:
                    pass

func load_body() -> Dictionary:
    var priv
    if privacy.get_selected_id() == 0:
        priv = true
    else:
        priv = false
    
    var read
    if readme.pressed:
        read = true
    else:
        read = false
    
    var gitignor = gitignore.get_item_text(gitignore.get_selected_id())
    var licens = license.get_item_metadata(license.get_selected_id())
    
    repo_body = {
        "name": nome.get_text(),
        "description": descrizione.get_text(),
        "private": priv,
        "has_issues": true,
        "has_projects": true,
        "has_wiki": true,
        "auto_init": read,
        "gitignore_template": gitignor,
        "license_template":  licens
        }
    
    return repo_body

func _on_NewRepo_confirmed():
    get_parent().loading(true)
    error.hide()
    requesting = REQUESTS.REPOS
    new_repo.request("https://api.github.com/user/repos",UserData.header,false,HTTPClient.METHOD_POST,JSON.print(load_body()))