#pragma once
#include "mp4.h"

namespace MP4{
  class SDTP : public Box{
  public:
    SDTP();
    void setVersion(uint32_t newVersion);
    uint32_t getVersion();
    void setValue(uint32_t newValue, size_t index);
    uint32_t getValue(size_t index);
    std::string toPrettyString(uint32_t indent = 0);
  };

  class UUID : public Box{
  public:
    UUID();
    std::string getUUID();
    void setUUID(const std::string &uuid_string);
    void setUUID(const char *raw_uuid);
    std::string toPrettyString(uint32_t indent = 0);
  };

  class UUID_TrackFragmentReference : public UUID{
  public:
    UUID_TrackFragmentReference();
    void setVersion(uint32_t newVersion);
    uint32_t getVersion();
    void setFlags(uint32_t newFlags);
    uint32_t getFlags();
    void setFragmentCount(uint32_t newCount);
    uint32_t getFragmentCount();
    void setTime(size_t num, uint64_t newTime);
    uint64_t getTime(size_t num);
    void setDuration(size_t num, uint64_t newDuration);
    uint64_t getDuration(size_t num);
    std::string toPrettyString(uint32_t indent = 0);
  };

  class UUID_TFXD : public UUID{
  public:
    UUID_TFXD();
    void setVersion(uint32_t newVersion);
    uint32_t getVersion();
    void setFlags(uint32_t newFlags);
    uint32_t getFlags();
    void setTime(uint64_t newTime);
    uint64_t getTime();
    void setDuration(uint64_t newDuration);
    uint64_t getDuration();
    std::string toPrettyString(uint32_t indent = 0);
  };
}// namespace MP4