using Tiku.Application.Catalog;
using Tiku.Application.Content;

namespace Tiku.Application.TenantAdmin;

public interface ITenantAdminDirectService
{
    Task<TenantAdminOverviewItem> GetOverviewAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<TenantAdminClassList> GetClassesAsync(
        TenantAdminActor actor,
        TenantAdminClassFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminClassItem>> UpsertClassAsync(
        TenantAdminActor actor,
        UpsertTenantAdminClassCommand command,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminClassItem>> DisableClassAsync(
        TenantAdminActor actor,
        Guid classId,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminClassMemberItem>> GetClassMembersAsync(
        TenantAdminActor actor,
        TenantAdminClassMemberFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminClassMemberItem>> UpsertClassMemberAsync(
        TenantAdminActor actor,
        UpsertTenantAdminClassMemberCommand command,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminClassMemberItem>> RemoveClassMemberAsync(
        TenantAdminActor actor,
        Guid classMemberId,
        CancellationToken cancellationToken = default);

    Task<TenantAdminStudentList> GetStudentsAsync(
        TenantAdminActor actor,
        TenantAdminStudentFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminStudentItem>> UpsertStudentAsync(
        TenantAdminActor actor,
        UpsertTenantAdminStudentCommand command,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminStudentStatusItem>> UpdateStudentStatusAsync(
        TenantAdminActor actor,
        UpdateTenantAdminStudentStatusCommand command,
        CancellationToken cancellationToken = default);

    Task<TenantAdminStudentImportPreview> PreviewStudentImportAsync(
        TenantAdminActor actor,
        TenantAdminStudentImportCommand command,
        CancellationToken cancellationToken = default);

    Task<TenantAdminStudentImportResult> ImportStudentsAsync(
        TenantAdminActor actor,
        TenantAdminStudentImportCommand command,
        CancellationToken cancellationToken = default);

    Task<TenantAdminBulkOperationResult> BulkAssignClassAsync(
        TenantAdminActor actor,
        TenantAdminBulkAssignClassCommand command,
        CancellationToken cancellationToken = default);

    Task<TenantAdminBulkOperationResult> BulkUpdateStudentStatusAsync(
        TenantAdminActor actor,
        TenantAdminBulkStatusCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantSupervisionRuleItem>> GetSupervisionRulesAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantSupervisionRuleItem>> UpsertSupervisionRuleAsync(
        TenantAdminActor actor,
        UpsertTenantSupervisionRuleCommand command,
        CancellationToken cancellationToken = default);

    Task<TenantSupervisionPreview> PreviewSupervisionAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<TenantSupervisionGenerateResult> GenerateSupervisionFollowupsAsync(
        TenantAdminActor actor,
        TenantSupervisionGenerateCommand command,
        CancellationToken cancellationToken = default);

    Task<TenantFollowupReport> GetFollowupReportAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<TenantFeedbackReport> GetFeedbackReportAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<TenantPointRiskReport> GetPointRiskReportAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminStudentNoteItem>> GetStudentNotesAsync(
        TenantAdminActor actor,
        TenantAdminStudentActivityFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminStudentNoteItem>> UpsertStudentNoteAsync(
        TenantAdminActor actor,
        UpsertTenantAdminStudentNoteCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminStudentFollowupItem>> GetStudentFollowupsAsync(
        TenantAdminActor actor,
        TenantAdminStudentActivityFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminStudentFollowupItem>> UpsertStudentFollowupAsync(
        TenantAdminActor actor,
        UpsertTenantAdminStudentFollowupCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminMemberItem>> GetMembersAsync(
        TenantAdminActor actor,
        TenantAdminMemberFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminMemberItem>> UpsertMemberAsync(
        TenantAdminActor actor,
        UpsertTenantAdminMemberCommand command,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminMemberItem>> DisableMemberAsync(
        TenantAdminActor actor,
        Guid membershipId,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminAuditLogItem>> GetAuditLogsAsync(
        TenantAdminActor actor,
        TenantAdminAuditLogFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantBrandingItem>> UpsertBrandingAsync(
        TenantAdminActor actor,
        UpsertTenantBrandingCommand command,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantSettingsItem>> UpsertSettingsAsync(
        TenantAdminActor actor,
        UpsertTenantSettingsCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantThemeTemplateItem>> GetThemeTemplatesAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantThemeItem>> GetThemeAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantThemeItem>> PreviewThemeAsync(
        TenantAdminActor actor,
        PreviewTenantThemeCommand command,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantThemeItem>> PublishThemeAsync(
        TenantAdminActor actor,
        PublishTenantThemeCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantDomainItem>> GetDomainsAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantDomainItem>> CreateDomainAsync(
        TenantAdminActor actor,
        CreateTenantDomainCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantIdentityProviderItem>> GetAuthProvidersAsync(
        TenantAdminActor actor,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantIdentityProviderItem>> UpsertAuthProviderAsync(
        TenantAdminActor actor,
        UpsertTenantIdentityProviderCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminBadgeItem>> GetBadgesAsync(
        TenantAdminActor actor,
        TenantAdminBadgeFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminBadgeItem>> UpsertBadgeAsync(
        TenantAdminActor actor,
        UpsertTenantAdminBadgeCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminBadgeGrantItem>> GetBadgeGrantsAsync(
        TenantAdminActor actor,
        TenantAdminBadgeGrantFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminBadgeGrantItem>> GrantBadgeAsync(
        TenantAdminActor actor,
        GrantTenantAdminBadgeCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminNotificationItem>> GetNotificationsAsync(
        TenantAdminActor actor,
        TenantAdminNotificationFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminNotificationItem>> UpsertNotificationAsync(
        TenantAdminActor actor,
        UpsertTenantAdminNotificationCommand command,
        CancellationToken cancellationToken = default);

    Task<CatalogList<TenantAdminFeedbackItem>> GetFeedbacksAsync(
        TenantAdminActor actor,
        TenantAdminFeedbackFilter filter,
        CancellationToken cancellationToken = default);

    Task<ContentManagementResult<TenantAdminFeedbackItem>> UpdateFeedbackAsync(
        TenantAdminActor actor,
        UpdateTenantAdminFeedbackCommand command,
        CancellationToken cancellationToken = default);
}
