#ifndef ACL_H
#define ACL_H

#include <Arduino.h>
#include <initializer_list>
#include <EEPROM.h>

#include <Preferences.h>

#ifdef WEB_SERVER
    #ifdef WEB_SERIAL_DEBUG
        #include <WebSerial.h>
    #endif
#endif

struct User {
  String cardId;
  String desc;
};

class ACL {
public:
  ACL();
  ACL(std::initializer_list<User> userList);
  ~ACL();


  void addUser(const String& cardId, const String& desc);
  void updateUser(const String& cardId, const String& newCardId, const String& newdesc);
  bool removeUser(const String& cardId);
  bool validateAccess(const String& cardId);
  int getACLSize() const;

  // Additional EEPROM functions
  void saveToEEPROM();
  void loadFromEEPROM();

  const User* getACL() const { return acl; } // Getter for acl  
  
private:
  User* acl;
  int aclSize;
};

#endif