#pragma once
#include "../Activity.h"
#include <Bitmap.h>
#include <string>
class SleepActivity final : public Activity {
public:
explicit SleepActivity(GfxRenderer& renderer, MappedInputManager& mappedInput)
: Activity("Sleep", renderer, mappedInput) {}
void onEnter() override;
private:
void renderPopup(const char* message) const;
void renderDefaultSleepScreen() const;
void renderCustomSleepScreen() const;
void renderCoverSleepScreen() const;
void renderBitmapSleepScreen(const Bitmap& bitmap, const std::string& bmpPath) const;
void renderBlankSleepScreen() const;
// Edge luminance caching helpers
static std::string getEdgeCachePath(const std::string& bmpPath);
EdgeLuminance getEdgeLuminance(const Bitmap& bitmap, const std::string& bmpPath) const;
// Book-level edge cache helpers (for skipping book metadata loading)
static std::string getBookEdgeCachePath(const std::string& bookPath);
static std::string getCoverBmpPath(const std::string& cacheDir, const std::string& bookPath, bool cropped);
bool tryRenderCachedCoverSleep(const std::string& bookPath, bool cropped) const;
// Quantize luminance (0-255) to 4-level grayscale (0-3)
static uint8_t quantizeGray(uint8_t lum);
};