import { IChannel } from "../../discussions/api/types";
import { IEntityPermissionPolicy } from "../../permissions/types/IEntityPermissionPolicy";
import { IWithViewSettings } from "../traits/IWithViewSettings";
import { HubEntityType } from "./HubEntityType";
import { IHubEntityBase } from "./IHubEntityBase";
import { IHubLocation } from "./IHubLocation";
import { AccessLevel } from "./types";
/**
 * Defines the properties of a Hub Channel object
 */
export interface IHubChannel extends IHubEntityBase {
    /**
     * An array of blocked words. Posts & replies created/edited containing these words will result in the post status being automatically set to blocked
     */
    blockWords: string[];
    /**
     * An array of IEntityPermissionPolicy representing the configured permissions for the channel
     */
    permissions: IEntityPermissionPolicy[];
    /**
     * True when authenticated users can post pseudo-anonymously, masking their identity
     */
    allowAsAnonymous: boolean;
    /**
     * True when the currently authenticated user can edit the channel
     */
    canEdit: boolean;
    /**
     * True when the currently authenticated user can delete the channel
     */
    canDelete: boolean;
    /**
     * The ID of the organization the channel was created within
     */
    orgId: string;
    /**
     * The owner of the channel
     */
    owner: string;
    /**
     * A reference to the underlying IChannel object
     */
    channel: IChannel;
    /**
     * The access level of the channel
     */
    access: AccessLevel;
    /**
     * Typekeywords applied to the channel
     */
    typeKeywords: string[];
    /**
     * Thumbnail of the channel
     */
    thumbnail?: string;
    /**
     * View settings of the channel
     */
    view?: IWithViewSettings;
    /**
     * Description of the channel
     */
    description?: string;
    /**
     * Tags applied to the channel
     */
    tags: string[];
    /**
     * The location of the channel
     */
    location?: IHubLocation;
}
export interface IHubRoleConfigValue {
    key: string;
    entityId?: string;
    entityType?: HubEntityType;
    roles: Record<string, {
        value: string;
        id?: string;
    }>;
}
export interface IHubChannelEditor {
    id: string;
    name: string;
    blockWords: string;
    publicConfigs: IHubRoleConfigValue[];
    orgConfigs: IHubRoleConfigValue[];
    groupConfigs: IHubRoleConfigValue[];
    userConfigs: IHubRoleConfigValue[];
    allowAsAnonymous: boolean;
}
