(function($TDP){
  //
  // Block: Setup a simple JavaScript object configuration loader.
  //
  (function(){
    var continueLoading = function(token, identifier, fileName, onSuccess, onFailure){
      $TDP.readFile(token, fileName, true).then(contents => {
        var obj;

        try{
          obj = eval("("+contents+")");
        }catch(err){
          if (!(onFailure && onFailure(err.message))){
            $TD.alert("warning", "Problem loading '"+fileName+"' file for '"+identifier+"' plugin, the JavaScript syntax is invalid: "+err.message);
          }

          return;
        }

        onSuccess && onSuccess(obj);
      }).catch(err => {
        if (!(onFailure && onFailure(err))){
          $TD.alert("warning", "Problem loading '"+fileName+"' file for '"+identifier+"' plugin: "+err);
        }
      });
    };
    
    window.TDPF_loadConfigurationFile = function(pluginObject, fileNameUser, fileNameDefault, onSuccess, onFailure){
      var identifier = pluginObject.$id;
      var token = pluginObject.$token;

      $TDP.checkFileExists(token, fileNameUser).then(exists => {
        if (!exists){
          $TDP.readFile(token, fileNameDefault, true).then(contents => {
            $TDP.writeFile(token, fileNameUser, contents);
            continueLoading(token, identifier, fileNameUser, onSuccess, onFailure);
          }).catch(err => {
            if (!(onFailure && onFailure(err))){
              $TD.alert("warning", "Problem generating '"+fileNameUser+"' file for '"+identifier+"' plugin: "+err);
            }
          });
        }
        else{
          continueLoading(token, identifier, fileNameUser, onSuccess, onFailure);
        }
      }).catch(err => {
        if (!(onFailure && onFailure(err))){
          $TD.alert("warning", "Problem checking '"+fileNameUser+"' file for '"+identifier+"' plugin: "+err);
        }
      });
    };
  })();
})($TDP);