#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\PlaybackControls.hpp"
#pragma once

extern melody_attributes melody;

bool timeToStop(unsigned long now);
bool timeToPause(unsigned long now);
bool timeToResume(unsigned long now);
void durationTimer(void *param);

// Timer TASK to control playback state
void durationTimer(void *param) {

  // Task Setup


  // Task Loop
  while (true) {

    unsigned long now = millis();

    if (timeToStop(now)) {
        melody.stop();
    } else if (timeToPause(now)) {
        melody.pause();
    } else if (timeToResume(now)) {
        melody.unpause();
    }

    vTaskDelay(pdMS_TO_TICKS(1000)); // Check every 100ms
    }
}

// Check if it's time to stop playback
bool timeToStop(unsigned long now) {
    if (melody.isPlaying) {
        uint64_t stopTime = melody.startTime + melody.duration;
        if (now >= stopTime) {
            Serial.println("TIMER: Total Duration Reached");
            return true;
        }
    }
    return false;
}

// Check if it's time to pause playback
bool timeToPause(unsigned long now) {
    if (melody.isPlaying && melody.loop_duration > 0) {
        uint64_t pauseTimeLimit = melody.loopStartTime + melody.loop_duration;
        Serial.printf("PTL: %lu // NOW: ",pauseTimeLimit);
        Serial.println(now);
        if (now >= pauseTimeLimit && !melody.isPaused) {
            Serial.println("TIMER: Segment Duration Reached");
            melody.pauseTime = now;
            return true;
        }
    }
    return false;
}

// Check if it's time to resume playback
bool timeToResume(unsigned long now) {
    if (melody.isPaused) {
        uint64_t resumeTime = melody.pauseTime + melody.interval;
        if (now >= resumeTime) {
            Serial.println("TIMER: Pause Duration Reached");
            return true;
        }
    }
    return false;
}

// Handles Incoming Commands to PLAY or STOP
void handlePlaybackCommands(char * command){
  Serial.print("INCOMING COMMAND: ");
  Serial.println(command);
  if (command[0] == '1') {
    melody.play();
    PublishMqtt("OK - PLAY");
  } else if (command[0] == '0') {
    melody.forceStop();
    PublishMqtt("OK - STOP");
  }


}
