// TaskScheduler Mixly积木测试程序
// 测试所有积木功能

#include <TaskScheduler.h>

// 调度器对象
Scheduler ts;

// 任务数组（用于存储创建的任务）
Task* taskArray[10];
int taskCount = 0;

// 通用回调函数
void genericCallback() {
    // 通用回调函数
}

void genericOnEnable() {
    // 任务启用回调
}

void genericOnDisable() {
    // 任务禁用回调
}

// 测试回调函数
void testCallback1() {
    Serial.println("Test Task 1 executed!");
}

void testCallback2() {
    Serial.println("Test Task 2 executed!");
}

void priorityCallback() {
    Serial.println("Priority Task executed!");
}

void onceCallback() {
    Serial.println("One-time task executed!");
}

void setup() {
    // 初始化串口通信，波特率115200
    Serial.begin(115200);
    Serial.println("TaskScheduler Mixly Test Started!");
    
    // 测试基础任务创建
    Serial.println("Creating basic task...");
    Task testTask1(2000, 5, &testCallback1, &ts, true, NULL, NULL);
    taskArray[taskCount++] = &testTask1;
    
    // 测试循环任务
    Serial.println("Creating loop task...");
    Task testTask2(1000, -1, &testCallback2, &ts, true, NULL, NULL);
    taskArray[taskCount++] = &testTask2;
    
    // 测试一次性任务
    Serial.println("Creating one-time task...");
    Task onceTask(3000, 1, &onceCallback, &ts, true, NULL, NULL);
    taskArray[taskCount++] = &onceTask;
    
    // 测试优先级任务
    Serial.println("Creating priority task...");
    Task priorityTask(1500, -1, &priorityCallback, &ts, true, NULL, NULL);
    priorityTask.setPriority(10);
    taskArray[taskCount++] = &priorityTask;
    
    // 启用所有任务
    Serial.println("Enabling all tasks...");
    testTask1.enable();
    testTask2.enable();
    onceTask.enable();
    priorityTask.enable();
    
    // 测试任务状态查询
    Serial.print("Task 1 enabled: ");
    Serial.println(testTask1.isEnabled() ? "Yes" : "No");
    
    Serial.print("Task 1 remaining iterations: ");
    Serial.println(testTask1.getIterations());
    
    Serial.println("Setup completed!");
}

void loop() {
    // 执行任务调度器，运行所有已安排的任务
    ts.execute();
    
    // 可以在这里添加其他测试代码
    static unsigned long lastTest = 0;
    if (millis() - lastTest > 10000) { // 每10秒执行一次测试
        lastTest = millis();
        
        // 测试任务重启
        if (taskCount > 0 && taskArray[0]) {
            Serial.println("Restarting first task...");
            taskArray[0]->restart();
        }
    }
}