#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

void setup() {
  // Initialisation de la communication série simulée
  Serial.begin(115200);

  // Initialisation de l'écran OLED
  if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for (;;);
  }
  display.display();
  delay(2000);
  display.clearDisplay();
}

void loop() {
  if (Serial.available()) {
    String data = Serial.readStringUntil('\n');  // Lire les données reçues via série
    processMessage(data);
  }
}

void processMessage(String message) {
  display.clearDisplay();  // Effacer l'affichage précédent

  // Diviser les informations envoyées par Python (séparateur "|")
  int sep1 = message.indexOf('|');
  int sep2 = message.indexOf('|', sep1 + 1);
  int sep3 = message.indexOf('|', sep2 + 1);

  String title = message.substring(0, sep1);
  String artist = message.substring(sep1 + 1, sep2);
  String currentTime = message.substring(sep2 + 1, sep3);
  String duration = message.substring(sep3 + 1);

  // Organiser l'affichage sur l'écran OLED

  display.setTextSize(1);
  display.setTextColor(SSD1306_WHITE);

  // Affichage "Now Playing"
  display.setCursor(0, 0);
  display.println("Now Playing:");

  // Affichage du titre (éventuellement tronqué s'il est trop long)
  display.setCursor(0, 12);  // Décalage en Y pour éviter le chevauchement
  if (title.length() > 20) {
    title = title.substring(0, 20); // Limiter la longueur du titre
  }
  display.println("Title: " + title);

  // Affichage de l'artiste
  display.setCursor(0, 24);  // Ajustement du Y pour l'artiste
  if (artist.length() > 20) {
    artist = artist.substring(0, 20); // Limiter la longueur de l'artiste
  }
  display.println("Artist: " + artist);

  // Affichage du temps de lecture et de la durée totale
  display.setCursor(0, 36);  // Ajustement du Y pour éviter les chevauchements
  display.print("Time: " + currentTime + " / " + duration);

  // Mettre à jour l'affichage OLED
  display.display();
}