using Microsoft.EntityFrameworkCore;
using Tiku.Domain.Operations;
using Tiku.Domain.Platform;

namespace Tiku.Infrastructure.Persistence;

public sealed partial class TikuDbContext
{
    public DbSet<Banner> Banners => Set<Banner>();
    public DbSet<Faq> Faqs => Set<Faq>();
    public DbSet<Announcement> Announcements => Set<Announcement>();
    public DbSet<AuditLog> AuditLogs => Set<AuditLog>();
    public DbSet<BackendPermission> BackendPermissions => Set<BackendPermission>();
    public DbSet<BackendMenu> BackendMenus => Set<BackendMenu>();
    public DbSet<TenantBackendRole> TenantBackendRoles => Set<TenantBackendRole>();
    public DbSet<TenantBackendRolePermission> TenantBackendRolePermissions => Set<TenantBackendRolePermission>();
    public DbSet<TenantBackendRoleMenu> TenantBackendRoleMenus => Set<TenantBackendRoleMenu>();
    public DbSet<TenantBackendUserRole> TenantBackendUserRoles => Set<TenantBackendUserRole>();
    public DbSet<PlatformBackendRole> PlatformBackendRoles => Set<PlatformBackendRole>();
    public DbSet<PlatformBackendRolePermission> PlatformBackendRolePermissions => Set<PlatformBackendRolePermission>();
    public DbSet<PlatformBackendRoleMenu> PlatformBackendRoleMenus => Set<PlatformBackendRoleMenu>();
    public DbSet<PlatformBackendUserRole> PlatformBackendUserRoles => Set<PlatformBackendUserRole>();
    public DbSet<AuthorizationScopeVersion> AuthorizationScopeVersions => Set<AuthorizationScopeVersion>();

    public DbSet<AuthorizationCacheInvalidation> AuthorizationCacheInvalidations =>
        Set<AuthorizationCacheInvalidation>();

    public DbSet<BackgroundJob> BackgroundJobs => Set<BackgroundJob>();
    public DbSet<TenantLifecycleOperation> TenantLifecycleOperations => Set<TenantLifecycleOperation>();
    public DbSet<WorkerHeartbeat> WorkerHeartbeats => Set<WorkerHeartbeat>();
    public DbSet<UserNotification> UserNotifications => Set<UserNotification>();
    public DbSet<Badge> Badges => Set<Badge>();
    public DbSet<UserBadge> UserBadges => Set<UserBadge>();
    public DbSet<TenantContentNotification> TenantContentNotifications => Set<TenantContentNotification>();
    public DbSet<TenantThemeTemplate> TenantThemeTemplates => Set<TenantThemeTemplate>();
    public DbSet<TenantThemeConfig> TenantThemeConfigs => Set<TenantThemeConfig>();
    public DbSet<TenantBillingProfile> TenantBillingProfiles => Set<TenantBillingProfile>();
    public DbSet<TenantBillingPolicy> TenantBillingPolicies => Set<TenantBillingPolicy>();
    public DbSet<TenantOwnerActivationGrant> TenantOwnerActivationGrants => Set<TenantOwnerActivationGrant>();
    public DbSet<PlatformOperationIdempotency> PlatformOperationIdempotencies => Set<PlatformOperationIdempotency>();

    public DbSet<PlatformBillingInvoiceReminder> PlatformBillingInvoiceReminders =>
        Set<PlatformBillingInvoiceReminder>();

    public DbSet<PlatformAuditAlertRule> PlatformAuditAlertRules => Set<PlatformAuditAlertRule>();
    public DbSet<PlatformAuditAlert> PlatformAuditAlerts => Set<PlatformAuditAlert>();

    public DbSet<PlatformBillingDunningNotificationChannel> PlatformBillingDunningNotificationChannels =>
        Set<PlatformBillingDunningNotificationChannel>();

    public DbSet<PlatformBillingDunningNotificationEvent> PlatformBillingDunningNotificationEvents =>
        Set<PlatformBillingDunningNotificationEvent>();

    public DbSet<PlatformPaymentApp> PlatformPaymentApps => Set<PlatformPaymentApp>();
    public DbSet<PlatformPaymentChannel> PlatformPaymentChannels => Set<PlatformPaymentChannel>();
    public DbSet<PlatformApprovalPolicy> PlatformApprovalPolicies => Set<PlatformApprovalPolicy>();
    public DbSet<PlatformApprovalRequest> PlatformApprovalRequests => Set<PlatformApprovalRequest>();

    public DbSet<PlatformConfigurationDefinition> PlatformConfigurationDefinitions =>
        Set<PlatformConfigurationDefinition>();

    public DbSet<PlatformConfigurationVersion> PlatformConfigurationVersions => Set<PlatformConfigurationVersion>();
    public DbSet<PlatformNotificationTemplate> PlatformNotificationTemplates => Set<PlatformNotificationTemplate>();
    public DbSet<PlatformNotificationDelivery> PlatformNotificationDeliveries => Set<PlatformNotificationDelivery>();
}