using Bit.Core.Vault.Enums;
using Bit.Seeder.Data.Distributions;
using Bit.Seeder.Data.Enums;
namespace Bit.Seeder.Options;
///
/// Options for seeding an organization with vault data.
///
public class OrganizationVaultOptions
{
///
/// Organization name.
///
public required string Name { get; init; }
///
/// Domain for user emails (e.g., "example.com").
///
public required string Domain { get; init; }
///
/// Number of member users to create.
///
public required int Users { get; init; }
///
/// Number of login ciphers to create.
///
public int Ciphers { get; init; } = 0;
///
/// Number of groups to create.
///
public int Groups { get; init; } = 0;
///
/// When true and Users >= 10, creates a realistic mix of user statuses:
/// 85% Confirmed, 5% Invited, 5% Accepted, 5% Revoked.
/// When false or Users < 10, all users are Confirmed.
///
public bool RealisticStatusMix { get; init; } = false;
///
/// Org structure for realistic collection names.
///
public OrgStructureModel? StructureModel { get; init; }
///
/// Username pattern for corporate email format (e.g., first.last@domain).
/// Only applies to CorporateEmail category usernames.
///
public UsernamePatternType UsernamePattern { get; init; } = UsernamePatternType.FirstDotLast;
///
/// Distribution of username categories (corporate email, personal email, social handles, etc.).
/// Use for a typical enterprise mix (45% corporate).
/// Defaults to Realistic if not specified.
///
public Distribution UsernameDistribution { get; init; } = UsernameDistributions.Realistic;
///
/// Distribution of password strengths for cipher logins.
/// Use for breach-data distribution
/// (25% VeryWeak, 30% Weak, 25% Fair, 15% Strong, 5% VeryStrong).
/// Defaults to Realistic if not specified.
///
public Distribution PasswordDistribution { get; init; } = PasswordDistributions.Realistic;
///
/// Geographic region for culturally-appropriate name generation in cipher usernames.
/// Defaults to Global (mixed locales from all regions).
///
public GeographicRegion? Region { get; init; }
///
/// When specified, ciphers are distributed according to the percentages.
/// Use for a typical enterprise mix.
///
public Distribution CipherTypeDistribution { get; init; } = CipherTypeDistributions.Realistic;
///
/// Seed for deterministic data generation. When null, derived from Domain hash.
///
public int? Seed { get; init; }
}