#pragma once

#include "DataSpec/DNACommon/DNACommon.hpp"
#include "CINF.hpp"
#include "../DNAMP2/CSKR.hpp"

namespace DataSpec::DNAMP3 {

struct CSKR : BigDNA {
  AT_DECL_DNA
  DNAFourCC magic;
  Value<atUint32> version;
  DNAMP2::CSKR data;
  Value<atUint32> matrixCount;
  struct MatrixBindings : BigDNA {
    AT_DECL_DNA
    Value<atInt16> mtxs[10];
  };
  Vector<MatrixBindings, AT_DNA_COUNT(matrixCount / 10)> mtxBindings;

  Value<atUint32> unkCount1;
  Vector<atUint8, AT_DNA_COUNT(unkCount1)> unk1;
  Value<atUint32> unkCount2;
  Vector<atUint8, AT_DNA_COUNT(unkCount2)> unk2;
  Value<atUint32> unkCount3;
  Vector<atUint8, AT_DNA_COUNT(unkCount3)> unk3;
  Value<atUint32> unkCount4;
  Vector<atUint8, AT_DNA_COUNT(unkCount4)> unk4;
  Value<atUint32> unkCount5;
  Vector<atUint8, AT_DNA_COUNT(unkCount5)> unk5;

  const atInt16* getMatrixBank(size_t idx) const { return mtxBindings.at(idx).mtxs; }

  void weightVertex(hecl::blender::PyOutStream& os, const CINF& cinf, atInt16 skinIdx) const;
};

} // namespace DataSpec::DNAMP3
