#include "device_preferences.h"
#include "ui_state.h"
#include "wifi_profiles.h"
#include "wifi_selection.h"
#include <cassert>
#include <cstdio>

int main() {
    using namespace wearable;
    static_assert(sizeof(Blob)==25);
    // UiState grew for the Network settings screens: it holds up to KNOWN_MAX
    // SSIDs (std::string each) so the Known Networks list can render without a
    // second allocation source. The bound stays small and fixed; there is no
    // unbounded growth here.
    static_assert(UiState::KNOWN_MAX==6);
    assert(sizeof(DevicePreferences)<=12 && sizeof(LoadedPreferences)<=24 && sizeof(UiState)<=320);
    // The profile store is bounded by the plan (at most 5 known networks).
    static_assert(WIFI_MAX_PROFILES==5);
    // 33 SSID + 65 password bytes plus a counter; padding may add a few.
    assert(sizeof(WiFiProfile)>=WIFI_SSID_MAX+1+WIFI_PASSWORD_MAX+1+4);
    assert(sizeof(WiFiProfile)<=WIFI_SSID_MAX+1+WIFI_PASSWORD_MAX+1+4+8);
    assert(WIFI_STORE_MAX_BYTES <= 640);
    std::printf("Wearable RAM structs: DevicePreferences=%zu LoadedPreferences=%zu UiState=%zu NVSBlob=%zu "
                "WiFiProfile=%zu WiFiStoreMax=%zu PASS\n",
        sizeof(DevicePreferences),sizeof(LoadedPreferences),sizeof(UiState),sizeof(Blob),
        sizeof(WiFiProfile),WIFI_STORE_MAX_BYTES);
}