namespace PlotLine.Models;

public sealed class AppUser
{
    public int UserID { get; set; }
    public string Email { get; set; } = string.Empty;
    public string DisplayName { get; set; } = string.Empty;
    public string PasswordHash { get; set; } = string.Empty;
    public bool EmailConfirmed { get; set; }
    public bool IsLocked { get; set; }
    public int FailedLoginAttempts { get; set; }
    public DateTime? LockoutEndUtc { get; set; }
    public bool TwoFactorEnabled { get; set; }
    public DateTime CreatedUtc { get; set; }
    public DateTime UpdatedUtc { get; set; }
    public DateTime? LastLoginUtc { get; set; }
    public Guid SecurityStamp { get; set; }
}

public sealed class UserEmailVerificationToken
{
    public int TokenID { get; set; }
    public int UserID { get; set; }
    public Guid Token { get; set; }
    public DateTime ExpiryUtc { get; set; }
    public DateTime? UsedUtc { get; set; }
}

public sealed class UserPasswordResetToken
{
    public int TokenID { get; set; }
    public int UserID { get; set; }
    public Guid Token { get; set; }
    public DateTime ExpiryUtc { get; set; }
    public DateTime? UsedUtc { get; set; }
}

public sealed class UserTwoFactor
{
    public int UserID { get; set; }
    public string SecretKey { get; set; } = string.Empty;
    public string? RecoveryCodes { get; set; }
    public DateTime CreatedUtc { get; set; }
    public DateTime? ConfirmedUtc { get; set; }
    public long? LastUsedTimeStep { get; set; }
}

public sealed class UserLoginAudit
{
    public long AuditID { get; set; }
    public int? UserID { get; set; }
    public string? EmailAttempted { get; set; }
    public string? IpAddress { get; set; }
    public string? UserAgent { get; set; }
    public bool WasSuccessful { get; set; }
    public string? Reason { get; set; }
    public DateTime CreatedUtc { get; set; }
}
