export type WorkspaceRole = 'owner' | 'admin' | 'member' | 'viewer'
export type WorkspaceAccess = 'read' | 'write' | 'admin'

export interface WorkspaceAccessInput {
  userId: string
  workspaceOwnerUserId: string
  workspaceDirectRole: WorkspaceRole | null
}

const ROLE_RANK: Record<WorkspaceRole, number> = {
  viewer: 1,
  member: 2,
  admin: 3,
  owner: 3,
}

const ACCESS_RANK: Record<WorkspaceAccess, number> = {
  read: 1,
  write: 2,
  admin: 3,
}

export function roleAllowsAccess(role: WorkspaceRole | null, access: WorkspaceAccess): boolean {
  if (!role) return false
  return ROLE_RANK[role] >= ACCESS_RANK[access]
}

export function getEffectiveWorkspaceRole(input: WorkspaceAccessInput): WorkspaceRole | null {
  if (input.userId === input.workspaceOwnerUserId) return 'owner'
  return input.workspaceDirectRole
}

export function isWorkspaceRole(value: unknown): value is WorkspaceRole {
  return value === 'owner' || value === 'admin' || value === 'member' || value === 'viewer'
}
