using System.ComponentModel;
using DotNetCTFDumper.GUI;
using DotNetCTFDumper.MMFParser.EXE.Loaders.Banks;
using static DotNetCTFDumper.MMFParser.EXE.Exe;

namespace DotNetCTFDumper.Utils
{
    public static class Backend
    {
        public static void DumpSounds(MainForm form,bool load,bool save)
        {
            using (var worker = new BackgroundWorker())
            {
                if (Instance.GameData.GameChunks.GetChunk<SoundBank>() == null) return;
                form.SetSoundElements(true);
                worker.DoWork += (senderA, eA) => { Instance.GameData.GameChunks.GetChunk<SoundBank>().Read(save); };
                worker.RunWorkerCompleted += (senderA, eA) =>
                {
                    form.SetSoundElements(false);
                    MainForm.IsDumpingSounds = false;
                };
                worker.RunWorkerAsync();
            }
        }
        public static void DumpImages(MainForm form,bool load,bool save)
        {
            using (var worker = new BackgroundWorker())
            {
                if (Instance.GameData.GameChunks.GetChunk<ImageBank>() == null) return;
                form.SetImageElements(true);
                worker.DoWork += (senderA, eA) =>
                {
                    Instance.GameData.GameChunks.GetChunk<ImageBank>().PreloadOnly = false;
                    Instance.GameData.GameChunks.GetChunk<ImageBank>().Read(load,save);
                };
                worker.RunWorkerCompleted += (senderA, eA) =>
                {
                    form.SetImageElements(false);
                    MainForm.IsDumpingImages = false;
                };
                worker.RunWorkerAsync();
            }
        }
        public static void DumpMusics(MainForm form,bool load,bool save)
        {
            using (var worker = new BackgroundWorker())
            {
                if (Instance.GameData.GameChunks.GetChunk<MusicBank>() == null) return;
                form.SetMusicElements(true);
                worker.DoWork += (senderA, eA) => { Instance.GameData.GameChunks.GetChunk<MusicBank>().Read(save); };
                worker.RunWorkerCompleted += (senderA, eA) =>
                {
                    form.SetMusicElements(false);
                    MainForm.IsDumpingMusics = false;
                };
                worker.RunWorkerAsync();
            }
        }
        
        
    }
}