// task-scheduler.js
// https://github.com/gnh1201/welsonjs

// Connect to Task Scheduler service
function connect() {
    var service = CreateObject("Schedule.Service");
    service.Connect();
    return service;
}

// Get the root folder of Task Scheduler
function getRootFolder(service) {
    return service.GetFolder("\\");
}

// Create a new task definition
function createTaskDefinition(service) {
    return service.NewTask(0); // Flags = 0
}

// Set registration info for the task
function setRegistrationInfo(taskDefinition, description, author) {
    var regInfo = taskDefinition.RegistrationInfo;
    regInfo.Description = description;
    regInfo.Author = author;
}

// Configure task settings
function configureTaskSettings(taskDefinition) {
    var settings = taskDefinition.Settings;
    settings.StartWhenAvailable = true;
}

// Create a registration trigger
function createRegistrationTrigger(taskDefinition) {
    var triggers = taskDefinition.Triggers;
    var trigger = triggers.Create(7); // 7 = Registration Trigger
    trigger.ExecutionTimeLimit = "PT5M"; // Five minutes
    trigger.Id = "RegistrationTriggerId";
}

// Add an action to execute a program
function addExecutableAction(taskDefinition, executablePath) {
    var actions = taskDefinition.Actions;
    var action = actions.Create(0); // 0 = Executable Action
    action.Path = executablePath;
}

// Register the task in Task Scheduler
function registerTask(rootFolder, taskDefinition, taskName) {
    rootFolder.RegisterTaskDefinition(
        taskName,
        taskDefinition,
        6,    // Task creation flags
        null, // UserId
        null, // Password
        3     // LogonType
    );
}

// Create and register the task
function createAndRegisterTask(service, rootFolder, taskName, executablePath, description, author) {
    var taskDefinition = createTaskDefinition(service);

    setRegistrationInfo(taskDefinition, description, author);
    configureTaskSettings(taskDefinition);
    createRegistrationTrigger(taskDefinition);
    addExecutableAction(taskDefinition, executablePath);

    console.log("Task definition created. About to submit the task...");
    registerTask(rootFolder, taskDefinition, taskName);
    console.log("Task submitted.");
}

function test() {
    var service = connectToService();
    var rootFolder = getRootFolder(service);

    createAndRegisterTask(
        service,
        rootFolder,
        "Test Registration Trigger",
        "C:\\Windows\\System32\\notepad.exe",
        "Start Notepad when the task is registered.",
        "Author Name"
    );
}

exports.connect = connect;
exports.getRootFolder = getRootFolder;
exports.createAndRegisterTask = createAndRegisterTask;
exports.test = test;

exports.VERSIONINFO = "Windows Task Scheduler Scripting Interface (task-scheduler.js) version 0.1";
exports.AUTHOR = "abuse@catswords.net";
exports.global = global;
exports.require = require;