using LibHac.Bcat;
using LibHac.Common.Keys;
using LibHac.Fs.Fsa;
using LibHac.FsSrv;
using LibHac.Tools.Fs;

namespace LibHac.Tests;

public static class HorizonFactory
{
    public static Horizon CreateBasicHorizon()
    {
        IFileSystem rootFs = new InMemoryFileSystem();
        var keySet = new KeySet();

        var horizon = new Horizon(new HorizonConfiguration());

        HorizonClient fsServerClient = horizon.CreatePrivilegedHorizonClient();
        var fsServer = new FileSystemServer(fsServerClient);

        var defaultObjects = DefaultFsServerObjects.GetDefaultEmulatedCreators(rootFs, keySet, fsServer);

        var config = new FileSystemServerConfig();
        config.FsCreators = defaultObjects.FsCreators;
        config.DeviceOperator = defaultObjects.DeviceOperator;
        config.ExternalKeySet = new ExternalKeySet();

        FileSystemServerInitializer.InitializeWithConfig(fsServerClient, fsServer, config);

        HorizonClient bcatServerClient = horizon.CreateHorizonClient();
        _ = new BcatServer(bcatServerClient);

        return horizon;
    }
}