#ifndef UTILITIES_H
#define UTILITIES_H

#include <Arduino.h>

/**
 * @brief Validates whether a given string contains only characters allowed in WiFi SSIDs and passwords.
 *
 * This function checks each character in the provided string to ensure
 * that it contains only characters allowed in WiFi SSIDs and passwords.
 * It considers characters from 'A' to 'Z', 'a' to 'z', '0' to '9', as well as
 * the following special characters: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
 *
 * @param string Pointer to the string to be validated.
 * @param size Size of the string including the null-terminator.
 * @return true if the string contains only allowed characters or is NULL,
 *         false otherwise.
 */
bool validateWiFiString(char *string, size_t size);

/**
 * @brief Copies a string to a buffer, replacing invalid WiFi SSID characters with a placeholder.
 *
 * This function checks each character in the provided input string to ensure
 * that it contains only characters allowed in WiFi SSIDs and passwords. If a character
 * is invalid, it replaces it with a placeholder character (e.g., '_').
 * It considers characters from 'A' to 'Z', 'a' to 'z', '0' to '9', as well as
 * the following special characters: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \ ] ^ _ ` { | } ~
 *
 * @param input Pointer to the input string to be validated and copied.
 * @param buffer Pointer to the buffer where the output string will be copied.
 * @param bufferSize Size of the buffer including the null-terminator.
 */
void sanitizeWiFiString(const char *input, char *buffer, size_t bufferSize);

/**
 * @brief Generates a device-specific password based on a seed and the ESP8266 Chip ID.
 *
 * This function combines a given seed with the unique Chip ID of the ESP8266 device to create a device-specific password.
 * The resulting password is stored in the provided character buffer.
 *
 * @param seed The seed string used for password generation. Should be up to 16 characters long.
 * @param passwordBuffer The character buffer where the generated password will be stored.
 * @param bufferLength The length of the password buffer. Should be large enough to hold the generated password and null terminator.
 */
void GenerateDeviceSpecificPassword(const char* seed, char* passwordBuffer, size_t bufferLength);

#endif // UTILITIES_H
