#pragma once

#include <cstdint>
#include <string>
#include <vector>

namespace obb::geomail {

enum class GeoMailView : uint8_t {
  kMailboxSelection = 0,
  kHeaderList,
  kReading,
  kWriting,
};

struct GeoAttachment {
  std::string name;
  uint32_t size_bytes = 0;
  std::string tag;
  std::string source_mailbox;
};

struct GeoContact {
  std::string pseudo;
  std::string obid;
  std::vector<std::string> aliases;
  std::vector<std::string> capabilities;  // MAY, POL...
};

struct GeoMailMessage {
  std::string mailbox;        // Boîte source : Mairie, Home, Proxy...
  std::string human_id;       // CVCV-123456
  std::string alias;          // prenom.nom.diff@region
  std::string pseudo;         // affiché dans l'UI
  std::string subject;        // bref
  std::string subject_long;   // champ signé blockchain
  std::string body_preview;   // extrait
  std::string body_full;      // texte complet (si disponible)
  std::vector<GeoAttachment> attachments;
  uint32_t attachment_hash = 0;
  uint32_t timestamp = 0;
  uint8_t priority = 0;
  uint8_t hop_count = 0;
  bool requires_ack = false;
};

}  // namespace obb::geomail