namespace PowderCoating.Core.Entities;

/// <summary>
/// Immutable audit record of a company admin accepting the SMS terms of service.
/// One record is written each time a user accepts (including re-accepts after a terms update).
/// The most recent record whose <see cref="TermsVersion"/> matches
/// <c>AppConstants.SmsTermsVersion</c> is the authoritative acceptance for that company.
/// Never soft-deleted — this is a legal audit trail.
/// </summary>
public class CompanySmsAgreement : BaseEntity
{
    /// <summary>The Identity user ID of the admin who clicked "I Agree".</summary>
    public string AgreedByUserId { get; set; } = string.Empty;

    /// <summary>Display name snapshot of the user at the time of agreement (for audit readability after user changes).</summary>
    public string AgreedByUserName { get; set; } = string.Empty;

    /// <summary>UTC timestamp of acceptance.</summary>
    public DateTime AgreedAt { get; set; }

    /// <summary>Client IP address at the time of acceptance. Stored for legal/fraud purposes.</summary>
    public string? IpAddress { get; set; }

    /// <summary>HTTP User-Agent header at the time of acceptance.</summary>
    public string? UserAgent { get; set; }

    /// <summary>
    /// The version of the SMS terms that was accepted (matches <c>AppConstants.SmsTermsVersion</c>
    /// at the moment of acceptance). When the platform bumps this version, existing records become
    /// stale and the company must re-accept.
    /// </summary>
    public string TermsVersion { get; set; } = string.Empty;
}
