import { IGroup, IGroupPropertiesConfig, defaultGroupPropertiesConfig } from '../user/group';
import { IPermission, IPermissionPropertiesConfig, defaultPermissionPropertiesConfig } from '../permission';
import { IWorkspaceRole, IWorkspaceRolePropertiesConfig, defaultWorkspaceRolePropertiesConfig } from './workspace-role';

export interface IWorkspaceRolePermission {
  id: number;
  name: string;
  permission: IPermission;
  workspaceRoleId: number | null;
  workspaceRole: IWorkspaceRole | null;
  groupId: number | null;
  group: IGroup | null;
}

export interface IWorkspaceRolePermissionCreateInput {
  name: string;
  permission: IPermission;
  workspaceRoleId: number;
  groupId: number;
}

interface IWorkspaceRolePermissionRelationProperties {
  permission: IPermissionPropertiesConfig;
  group: IGroupPropertiesConfig;
  workspaceRole: IWorkspaceRolePropertiesConfig;
}

export interface IWorkspaceRolePermissionPropertiesConfig {
  properties: {};
  relationProperties?: IWorkspaceRolePermissionRelationProperties;
}

export function defaultWorkspaceRolePermissionRelationProperties(): IWorkspaceRolePermissionRelationProperties {
  return {
    permission: defaultPermissionPropertiesConfig(),
    group: defaultGroupPropertiesConfig(),
    workspaceRole: defaultWorkspaceRolePropertiesConfig(),
  };
}

export function defaultWorkspaceRolePermissionPropertiesConfig(): IWorkspaceRolePermissionPropertiesConfig {
  return {
    properties: {},
    relationProperties: defaultWorkspaceRolePermissionRelationProperties(),
  };
}
