#include "stddef.h"
#include "dev_name.h"
#include "storage.h"
#include "stdio.h"
#include "random.h"
#include "constants.h"
#include "string.h"

#include "esp_log.h"

#define DEV_PREFIX "ESP32 "

static const char *TAG = "dev_name";

bool dev_generate_name()
{
    // Check if a device name has already been defined
    if (storage_get_dev_name(NULL) > 0)
        return false;

    // Generate random device name
    char name[DEV_NAME_LEN];
    rand_str(DEV_NAME_LEN - 1, name);
    storage_set_dev_name(name);

    return true;
}

char *dev_name()
{
    size_t len = storage_get_dev_name(NULL);

    char *dev = malloc(len + strlen(DEV_PREFIX) + 1);
    if (dev == NULL)
    {
        ESP_LOGE(TAG, "Failed to allocate memory to store dev name!");
        return NULL;
    }

    strcpy(dev, DEV_PREFIX);
    storage_get_dev_name(dev + strlen(DEV_PREFIX));

    return dev;
}