using Bit.Seeder.Factories;
using Bit.Seeder.Pipeline;
namespace Bit.Seeder.Steps;
///
/// Creates folders with explicit names for the first user, registering them as named folders for preset-driven assignments.
///
internal sealed class CreateNamedFoldersStep(List folderNames) : IStep
{
public void Execute(SeederContext context)
{
var userDigest = context.Registry.UserDigests[0];
var emailPrefix = context.Registry.UserEmailPrefixToUserId
.First(kvp => kvp.Value == userDigest.UserId).Key;
var namedFolders = new Dictionary(StringComparer.OrdinalIgnoreCase);
var folderIds = new List(folderNames.Count);
foreach (var folderName in folderNames)
{
if (namedFolders.ContainsKey(folderName))
{
throw new InvalidOperationException(
$"Duplicate folder name '{folderName}' in folderNames list.");
}
var folder = FolderSeeder.Create(userDigest.UserId, userDigest.SymmetricKey, folderName);
context.Folders.Add(folder);
namedFolders[folderName] = folder.Id;
folderIds.Add(folder.Id);
}
context.Registry.UserNamedFolders[emailPrefix] = namedFolders;
context.Registry.UserFolderIds[userDigest.UserId] = folderIds;
}
}