import { Context, ContextFactoryOptions, ContextDefaultState } from './context';
import { Attachmentable } from '../shared/attachmentable';
import { IPhotoAttachmentPayload } from '../attachments';
import { kSerializeData } from '../../utils/constants';
export type GroupUpdateContextType = 'group_update';
export type GroupUpdateContextSubType = 'group_change_photo' | 'group_officers_edit' | 'group_change_settings';
export interface IGroupUpdateContextPayload {
    user_id: number;
    admin_id: number;
    level_old?: number;
    level_new?: number;
    changes?: Record<string, {
        old_value: string;
        new_value: string;
    }>;
    photo?: IPhotoAttachmentPayload;
}
export type GroupUpdateContextOptions<S> = ContextFactoryOptions<IGroupUpdateContextPayload, S>;
declare class GroupUpdateContext<S = ContextDefaultState> extends Context<IGroupUpdateContextPayload, S, GroupUpdateContextType, GroupUpdateContextSubType> {
    constructor(options: GroupUpdateContextOptions<S>);
    /**
     * Checks is change photo
     */
    get isChangePhoto(): boolean;
    /**
     * Checks is change officers
     */
    get isChangeOfficers(): boolean;
    /**
     * Checks is change settings
     */
    get isChangeSettings(): boolean;
    /**
     * Returns the identifier admin
     */
    get adminId(): number | undefined;
    /**
     * Returns the identifier user
     */
    get userId(): number;
    /**
     * Returns the old level permission
     */
    get oldLevel(): number | undefined;
    /**
     * Returns the new level permission
     */
    get newLevel(): number | undefined;
    /**
     * Returns the changes settings
     */
    get changes(): Record<string, {
        old_value: string;
        new_value: string;
    }> | undefined;
    /**
     * Returns the custom data
     */
    [kSerializeData](): object;
}
interface GroupUpdateContext extends Attachmentable {
}
export { GroupUpdateContext };
