// 车流控制器，合并车流的输入路径，统一车流的输出路径

import TrafficSocket from '@/views/3DModel/socket'
import { carFormate } from '../utils'
import { bus } from '@/views/3DModel/state'
// import MookFlows from '../data/cars'

export default class Flow {
  
  cars = [] // 缓存车辆（原始车辆数据）
  direct = null // 车流方向（0 出发、1 返回）
  mode = null // 输入模式（online 在线、history 模拟）

  tunnel = null // 隧道

  socket = null // 链接
  frames = null // 历史车流缓存

  
  constructor (configs: { direct: number, [propName: string]: any }) {
    
    this.mode = configs.mode
    this.direct = configs.direct
    this.tunnel = configs.tunnel

    if (this.mode === 'online') {
      const keySocket = ['IN_CAR', 'OUT_CAR'][this.direct]
      this.socket = new TrafficSocket(keySocket)
    }

    if (this.mode === 'history') {
      this.frames = configs.frames
    }

  }

  // 开启车流
  start (call) {

    // 在线模式时，实时更新帧
    if (this.mode === 'online') {
     
      this.socket.start(res => {
        this.cars = res.vehicleInfoList
        .filter(item => { // 删除异常数据
          return item.carMilestone >= this.tunnel.start && item.carMilestone <= this.tunnel.end
        }).map(item => carFormate(item))
        call()
      })
     
    }

    // 历史模式时，模拟更新帧
    if (this.mode === 'history') {
      
    }

  }

  // 关闭连接
  close () {
    this.socket.close()
  }

  // 模拟车流
  mook (call) {
    // this.cars = MookFlows
    call()
  }


  // 输出供给
  exportCars () {
    return JSON.parse(JSON.stringify(this.cars))
  }

}
 


