using ZB.MOM.WW.CBDD.Bson;

namespace ZB.MOM.WW.CBDD.Tests.Benchmark;

public class Address
{
    /// <summary>
    ///     Gets or sets the Street.
    /// </summary>
    public string Street { get; set; } = string.Empty;

    /// <summary>
    ///     Gets or sets the City.
    /// </summary>
    public string City { get; set; } = string.Empty;

    /// <summary>
    ///     Gets or sets the ZipCode.
    /// </summary>
    public string ZipCode { get; set; } = string.Empty;
}

public class WorkHistory
{
    /// <summary>
    ///     Gets or sets the CompanyName.
    /// </summary>
    public string CompanyName { get; set; } = string.Empty;

    /// <summary>
    ///     Gets or sets the Title.
    /// </summary>
    public string Title { get; set; } = string.Empty;

    /// <summary>
    ///     Gets or sets the DurationYears.
    /// </summary>
    public int DurationYears { get; set; }

    /// <summary>
    ///     Gets or sets the Tags.
    /// </summary>
    public List<string> Tags { get; set; } = new();
}

public class Person
{
    /// <summary>
    ///     Gets or sets the Id.
    /// </summary>
    public ObjectId Id { get; set; }

    /// <summary>
    ///     Gets or sets the FirstName.
    /// </summary>
    public string FirstName { get; set; } = string.Empty;

    /// <summary>
    ///     Gets or sets the LastName.
    /// </summary>
    public string LastName { get; set; } = string.Empty;

    /// <summary>
    ///     Gets or sets the Age.
    /// </summary>
    public int Age { get; set; }

    /// <summary>
    ///     Gets or sets the Bio.
    /// </summary>
    public string? Bio { get; set; } = string.Empty;

    /// <summary>
    ///     Gets or sets the CreatedAt.
    /// </summary>
    public DateTime CreatedAt { get; set; }

    // Complex fields
    /// <summary>
    ///     Gets or sets the Balance.
    /// </summary>
    public decimal Balance { get; set; }

    /// <summary>
    ///     Gets or sets the HomeAddress.
    /// </summary>
    public Address HomeAddress { get; set; } = new();

    /// <summary>
    ///     Gets or sets the EmploymentHistory.
    /// </summary>
    public List<WorkHistory> EmploymentHistory { get; set; } = new();
}