#pragma once

#include "DataSpec/DNACommon/SAVWCommon.hpp"
#include "DNAMP3.hpp"

namespace DataSpec::DNAMP3 {
struct Scan : BigDNA {
  AT_DECL_DNA_YAML
  UniqueID64 scanId;
  Value<SAVWCommon::EScanCategory> category;
};

struct SavedState : BigDNA {
  AT_DECL_DNA_YAML
  struct ID : BigDNA {
    AT_DECL_DNA_YAML
    Value<atUint64> id[2];
  };
  ID id;
  Value<atUint32> instance;
};

struct SAVW : BigDNA {
  AT_DECL_DNA_YAML
  SAVWCommon::Header header;
  Value<atUint32> skippableCutsceneCount;
  Vector<SavedState, AT_DNA_COUNT(skippableCutsceneCount)> skippableCutscenes;
  Value<atUint32> relayCount;
  Vector<SavedState, AT_DNA_COUNT(relayCount)> relays;
  Value<atUint32> doorCount;
  Vector<SavedState, AT_DNA_COUNT(doorCount)> doors;
  Value<atUint32> scanCount;
  Vector<Scan, AT_DNA_COUNT(scanCount)> scans;
  Value<atUint32> systemVarCount;
  Vector<SAVWCommon::EnvironmentVariable, AT_DNA_COUNT(systemVarCount)> systemVars;
  Value<atUint32> gameVarCount;
  Vector<SAVWCommon::EnvironmentVariable, AT_DNA_COUNT(gameVarCount)> gameVars;
  Value<atUint32> gameObjectCount;
  Vector<SavedState, AT_DNA_COUNT(gameObjectCount)> gameObjects;
};
} // namespace DataSpec::DNAMP3
