#pragma once

#include <LovyanGFX.hpp>
#include "LGFX_Portals.h"

#define NUM_PORTALS   6      // 6 portails façade (hexagone)
#define TOTAL_GLYPHS  30     // 30 glyphes hiéroglyphiques

class PortalManager {
public:
    PortalManager();

    // Attacher un écran au gestionnaire
    void attach(int index, LGFX_Portal* screen);

    // Mise à jour du portail avec système de pages colorées
    void updatePortal(LGFX_Portal* p, int portalIndex, float presence);

private:
    LGFX_Portal* screens[NUM_PORTALS];

    // Timers pour la rotation
    unsigned long lastColorChange;
    unsigned long lastGlyphChange;
    
    // État actuel
    int currentColorIndex;
    int currentGlyphOffset[NUM_PORTALS];

    // Palettes de couleurs (RGB565)
    struct ColorPalette {
        uint16_t colors[12];
        const char* name;
    };

    ColorPalette coldPalette;   // Zone froide (loin)
    ColorPalette warmPalette;   // Zone chaude (proche)

    // Fonction de dessin des 30 glyphes
    void drawGlyph(LGFX_Portal* t, int x, int y, int size, uint32_t color, int glyphType);
    
    // Génération des palettes
    void initPalettes();
    
    // Interpolation de couleur selon la présence (gradient fluide)
    uint16_t getGradientColor(float presence, int colorIndex);
    
    // Conversion RGB vers RGB565
    uint16_t rgb565(uint8_t r, uint8_t g, uint8_t b);
    
    // Interpolation linéaire entre deux valeurs
    uint8_t lerp(uint8_t a, uint8_t b, float t);
};