import:
  ch.njol.skript.Skript
  java.io.File
  java.nio.file.Files
  java.nio.file.Paths
  java.nio.file.StandardCopyOption
  java.net.URL
  java.lang.Class


on script load:
  skript_update(console)

function skript_update(c: command executor):
  send "---------[Skript Updater]---------" to {_c}
  send "[Skript Updater] Trying to update..." to {_c}
  set {_updater} to Skript.getInstance().getUpdater()
  if {_updater} isn't set:
    send "[Skript Updater] &cFailed to get Updater! Stopping." to {_c}
    send "---------[Skript Updater]---------" to {_c}
    stop
  
  #send "[Skript Updater] Release Status: %{_updater}.getReleaseStatus()%" to {_c}
  if "%{_updater}.getReleaseStatus()%" is "LATEST":
    send "[Skript Updater] &aSkript is up-to-date! Doing nothing." to {_c}
    send "---------[Skript Updater]---------" to {_c}
    stop
  else:
    send "[Skript Updater] Skript isn't up to date at the moment. Trying to update." to {_c}
  set {_manifest} to {_updater}.getUpdateManifest()
  if {_manifest} isn't set:
    send "[Skript Updater] Failed to get Manifest! That's weird and scary. Stopping!" to {_c}
    send "---------[Skript Updater]---------" to {_c}
    stop
  
  set {_url} to {_manifest}.downloadUrl
  if {_url} is set:
    send "[Skript Updater] &aGot download URL: &f'%{_url}%'" to {_c}
  else:
    send "[Skript Updater] &cFailed to get download URL! Stopping." to {_c}
    send "---------[Skript Updater]---------" to {_c}
    stop

  set {_skript} to (class "org.bukkit.Bukkit").getPluginManager().getPlugin("Skript")
  set {_main} to {_skript}.getClass()
  set {_path} to new File({_main}.getProtectionDomain().getCodeSource().getLocation().toURI()).getPath()
  send "[Skript Updater] &aDownloading fresh Skript JAR..." to {_c}
  set {_in} to new URL("%{_url}%").openStream()
  Files.copy({_in}, Paths.get("./plugins/%last element out of ({_path} split at ""/"")%"), and StandardCopyOption.REPLACE_EXISTING)
  {_in}.close()
  send "[Skript Updater] &aFresh Skript JAR downloaded! Changes will be applied upon restart." to {_c}
  send "---------[Skript Updater]---------" to {_c}