namespace KeepersCompound.LGS.Database.Chunks;

public class TxList : IChunk
{
    public struct Item
    {
        public byte[] Tokens { get; set; }
        public string Name { get; set; }

        public Item(BinaryReader reader)
        {
            Tokens = reader.ReadBytes(4);
            Name = reader.ReadNullString(16);
        }

        public readonly void Write(BinaryWriter writer)
        {
            writer.Write(Tokens);
            writer.WriteNullString(Name, 16);
        }
    }


    public ChunkHeader Header { get; set; }

    public int BlockSize { get; set; }
    public int ItemCount { get; set; }
    public int TokenCount { get; set; }
    public string[] Tokens { get; set; }
    public Item[] Items { get; set; }

    public void ReadData(BinaryReader reader, DbFile.TableOfContents.Entry entry)
    {
        BlockSize = reader.ReadInt32();
        ItemCount = reader.ReadInt32();
        TokenCount = reader.ReadInt32();
        Tokens = new string[TokenCount];
        for (var i = 0; i < TokenCount; i++)
        {
            Tokens[i] = reader.ReadNullString(16);
        }
        Items = new Item[ItemCount];
        for (var i = 0; i < ItemCount; i++)
        {
            Items[i] = new Item(reader);
        }
    }

    public void WriteData(BinaryWriter writer)
    {
        writer.Write(BlockSize);
        writer.Write(ItemCount);
        writer.Write(TokenCount);
        foreach (var token in Tokens)
        {
            writer.WriteNullString(token, 16);
        }
        foreach (var item in Items)
        {
            item.Write(writer);
        }
    }
}