#ifndef _RFID_DATA_H_
#define _RFID_DATA_H_

#include <stdint.h>
#include <stdbool.h>

/// @brief Расшифровка дополнительных полей
typedef struct {
    /// @brief Пароль карты
    uint32_t password;
    /// @brief Дата последнего использования
    uint32_t time_use;
    /// @brief Количество использований в один день
    uint32_t count_use;

    uint32_t reserv1;
    uint32_t reserv2;
} external_fields;

typedef struct {
  uint32_t init;                        // 4 - обязательно должна быть в начале

  union {
      uint32_t uid[5];                      // 20
      external_fields fileds;
  };

  uint32_t money;                       // 4
  uint32_t bonus;                       // 4
  uint32_t type_abonement;              // 4
  uint32_t number_abonement;            // 4
  uint32_t best_before;                 // 4
  uint32_t crc;                         // 4

} abonement_data;                       // 48

typedef struct {
  abonement_data abonement_data_copy1;  // 48
  abonement_data abonement_data_copy2;  // 48

} mifaredata_t;                         // 96

extern mifaredata_t* get_mifare_data();
extern void set_mifare_data(mifaredata_t* data);

/// @brief Установка данных абонемента
/// @param data 
extern void set_abonement_data(abonement_data* data);

/// @brief Данные абонемента, получение
/// @return 
extern abonement_data* get_abonement_data();

extern mifaredata_t* read_mifare_card();
extern bool write_mifare_card();
extern mifaredata_t* init_mifare_card_data();
extern bool is_empty_mifare_card();
extern bool need_clear_bonus();
extern void stop_card_working();

/// @brief 
/// @return 
uint32_t get_mifare_uid();

#endif