using System.Text.Json;
using Tiku.Domain.Common;

namespace Tiku.Domain.Tenancy;

public sealed class Tenant : AuditableEntity
{
    public string Slug { get; set; } = string.Empty;
    public string Name { get; set; } = string.Empty;
    public string? LegalName { get; set; }
    public TenantStatus Status { get; set; } = TenantStatus.Active;
    public TenantMode Mode { get; set; } = TenantMode.Saas;
    public BillingStatus BillingStatus { get; set; } = BillingStatus.Trial;
    public Guid? OwnerUserId { get; set; }
    public string? LegacyId { get; set; }
    public JsonElement Metadata { get; set; } = JsonDefaults.Object();
}

public enum TenantStatus
{
    Draft,
    Active,
    Suspended,
    Archived
}

public enum TenantMode
{
    PlatformOwned,
    Saas,
    Dedicated
}

public enum BillingStatus
{
    Trial,
    Active,
    PastDue,
    Suspended,
    Cancelled
}