using System.Threading.Tasks;
using Wabbajack.Common;
using Wabbajack.Lib.Tasks;
using Xunit;
using Xunit.Abstractions;

namespace Wabbajack.Test
{
    public class TasksTests : ACompilerTest
    {
        [Fact]
        public async Task CanRemapGameFolder()
        {
            await using var tempFolder = await TempFolder.Create();
            var gameff = tempFolder.Dir.Combine(Consts.GameFolderFilesDir);
            gameff.CreateDirectory();

            await gameff.Combine("some_file.txt").WriteAllTextAsync("some_file");
            await gameff.Combine("steam_api64.dll").WriteAllTextAsync("steam_api");
            

            var meta = Game.SkyrimSpecialEdition.MetaData(); 
            await tempFolder.Dir.Combine(Consts.ModOrganizer2Ini)
                .WriteAllLinesAsync(
                    "[General]",
                    $"gameName={meta.MO2Name}",
                    $"gamePath={meta.GameLocation()}",
                    $"pathDouble={meta.GameLocation().ToString().Replace(@"\", @"\\")}",
                    $"pathForward={meta.GameLocation().ToString().Replace(@"\", @"/")}");

            Assert.True(await MigrateGameFolder.Execute(tempFolder.Dir));
            
            Assert.Equal("some_file", await gameff.Combine("some_file.txt").ReadAllTextAsync());
            Assert.Equal("steam_api", await gameff.Combine("steam_api64.dll").ReadAllTextAsync());
            Assert.Equal(Hash.FromBase64("k5EWx/9Woqg="), await gameff.Combine(@"Data\Skyrim - Interface.bsa").FileHashAsync());

            var ini = tempFolder.Dir.Combine(Consts.ModOrganizer2Ini).LoadIniFile();
            Assert.Equal(gameff, (AbsolutePath)(string)ini.General.gamePath);
            Assert.Equal(gameff, (AbsolutePath)(string)ini.General.pathDouble);
            Assert.Equal(gameff, (AbsolutePath)(string)ini.General.pathForward);


        }

        public TasksTests(ITestOutputHelper helper) : base(helper)
        {
        }
    }
}