import { AbstractApplicationPermissions, ApplicationPermissionEvents } from '@netless/forge-room';

export enum ForgeSlidePermissionFlag {
    /**
     * 没有任何权限, 只能同步他人的操作
     */
    none = 0b0000000000000000,
    /**
     * 可以操作上一步下一步动画
     */
    changeStep = 0b0000000000000001,
    /**
     * 可以切面页码
     */
    changePage = 0b0000000000000010,
    /**
     * 可以触发点击动画
     */
    clickAnim = 0b0000000000000100,
    /**
     * 拥有所有权限
     */
    all = ForgeSlidePermissionFlag.changePage |
        ForgeSlidePermissionFlag.changeStep |
        ForgeSlidePermissionFlag.clickAnim
}

export interface ForgeSlidePermissionEvents extends ApplicationPermissionEvents {
    /**
     * 当用户权限变更时触发
     * @param { string } userId 对应 userId
     * @param { ForgeSlidePermissionFlag[] } flags 当前权限列表
     * @param { number } value 权限值
     */
    change: (userId: string, flags: ForgeSlidePermissionFlag[], value: number) => void;
}

export class ForgeSlidePermissions extends AbstractApplicationPermissions<ForgeSlidePermissionFlag, ForgeSlidePermissionEvents> {
  /**
     * 解析权限列表组合
     * @param {number} value - 权限数字值
     * @return {WhiteboardPermissionFlag[]} - 权限列表
     */
  public resolveFlags(value: number): ForgeSlidePermissionFlag[] {
    return [
      ForgeSlidePermissionFlag.changePage,
      ForgeSlidePermissionFlag.changeStep,
      ForgeSlidePermissionFlag.clickAnim,
    ].filter(v => (v & value) !== 0);
  }
  
}