namespace FiscalFlow.Core.Entities; public class AccountingConnection : BaseEntity { public Guid UserId { get; private set; } public User User { get; private set; } = null!; public string Provider { get; private set; } = string.Empty; public string AccessTokenEncrypted { get; private set; } = string.Empty; public string RefreshTokenEncrypted { get; private set; } = string.Empty; public DateTime ExpiresAt { get; private set; } public string? Scope { get; private set; } public string? CompanyName { get; private set; } public string? CompanyOrgNumber { get; private set; } public string DefaultVoucherSeries { get; private set; } = "A"; public int DefaultAccountCode { get; private set; } = 5460; public bool AutoAttachPdf { get; private set; } = true; public bool AutoCreateSupplier { get; private set; } = false; public bool IsActive { get; private set; } = true; public DateTime? LastSyncAt { get; private set; } private readonly List _invoices = []; public IReadOnlyCollection Invoices => _invoices.AsReadOnly(); public static AccountingConnection Create( Guid userId, string provider, string accessTokenEncrypted, string refreshTokenEncrypted, DateTime expiresAt, string? scope = null, string? companyName = null, string? companyOrgNumber = null) { return new AccountingConnection { UserId = userId, Provider = provider, AccessTokenEncrypted = accessTokenEncrypted, RefreshTokenEncrypted = refreshTokenEncrypted, ExpiresAt = expiresAt, Scope = scope, CompanyName = companyName, CompanyOrgNumber = companyOrgNumber }; } public void UpdateTokens(string accessTokenEncrypted, string refreshTokenEncrypted, DateTime expiresAt) { AccessTokenEncrypted = accessTokenEncrypted; RefreshTokenEncrypted = refreshTokenEncrypted; ExpiresAt = expiresAt; } public void UpdateSettings( string? defaultVoucherSeries = null, int? defaultAccountCode = null, bool? autoAttachPdf = null, bool? autoCreateSupplier = null) { if (defaultVoucherSeries != null) DefaultVoucherSeries = defaultVoucherSeries; if (defaultAccountCode.HasValue) DefaultAccountCode = defaultAccountCode.Value; if (autoAttachPdf.HasValue) AutoAttachPdf = autoAttachPdf.Value; if (autoCreateSupplier.HasValue) AutoCreateSupplier = autoCreateSupplier.Value; } public void RecordSync() { LastSyncAt = DateTime.UtcNow; } public void Deactivate() { IsActive = false; } }