using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Switch_Toolbox.Library.IO;
using Syroot.BinaryData;
using System.IO;

namespace FirstPlugin
{
    public class SAHT
    {
        public string FileName { get; set; }

        public SAHT(string fileName) {
            FileName  = fileName;
            Read(new FileReader(fileName));
        }

        public List<HashEntry> HashEntries = new List<HashEntry>();

        private void Read(FileReader reader)
        {
            reader.ReadSignature(4, "SAHT");
            uint FileSize = reader.ReadUInt32();
            uint Offset = reader.ReadUInt32();
            uint EntryCount = reader.ReadUInt32();

            reader.Seek(Offset, System.IO.SeekOrigin.Begin);
            for (int i = 0; i <EntryCount; i++)
            {
                HashEntry entry = new HashEntry();
                entry.Read(reader);
                reader.Align(16);
                HashEntries.Add(entry);
            }

            ToTextFile();
        }

        public void ToTextFile()
        {
            StringWriter writer = new StringWriter();

            foreach (var entry in HashEntries)
            {
                writer.WriteLine($"{entry.Name}={entry.Hash.ToString("x")}");
            }

            File.WriteAllText(FileName + ".txt", writer.ToString());
        }

        public class HashEntry
        {
            public uint Hash { get; set; }
            public string Name { get; set; }

            public void Read(FileReader reader)
            {
                 Hash = reader.ReadUInt32();
                 Name = reader.ReadString(BinaryStringFormat.ZeroTerminated);
            }
        }
    }
}