import { InjectionToken } from '@angular/core'
import { Observable } from 'rxjs'

export const NEHUBA_VIEWER_FEATURE_KEY = 'ngViewerFeature'

export interface IRegion {
  [key: string]: any
  ngId: string
  rgb?: [number, number, number]
}

export interface IMeshesToLoad {
  labelIndicies: number[]
  layer: {
    name: string
  }
}

export type TVec4 = number[]
export type TVec3 = number[]

export interface INavObj {
  position: TVec3
  orientation: TVec4
  perspectiveOrientation: TVec4
  perspectiveZoom: number
  zoom: number
}

export type TNehubaViewerUnit = {
  viewerPositionChange: Observable<INavObj>
  setNavigationState(nav: Partial<INavObj> & { positionReal?: boolean }): void
}

export const SET_MESHES_TO_LOAD = new InjectionToken<Observable<IMeshesToLoad>>('SET_MESHES_TO_LOAD')

export const PMAP_LAYER_NAME = 'regional-pmap'

/**
 * since export_nehuba@0.1.0 onwards (the big update that changed a lot of neuroglancer's internals)
 * there is now a multiplier bewteen old and new perspective views
 * to maintain interop with previous states, translate the multiplier
 */
export const PERSPECTIVE_ZOOM_FUDGE_FACTOR = 82.842712474619