import { Client } from 'cozy-client'
import { JOBS_DOCTYPE } from 'doctypes'
import KonnectorJobWatcher from 'cozy-harvest-lib/dist/models/konnector/KonnectorJobWatcher'
import {
  ERROR_EVENT,
  LOGIN_SUCCESS_EVENT,
  SUCCESS_EVENT,
} from 'cozy-harvest-lib/dist/models/KonnectorJob'

// TODO import enums from harvestLib

export enum JobState {
  Errored = 'errored',
  Running = 'running',
  Done = 'done',
}

export class JobService {
  constructor(private _client: Client) {
    this._client = _client
  }

  fetchJob = async jobId => {
    return await this._client.query(this._client.get(JOBS_DOCTYPE, jobId))
  }

  watch = async (job: any, callbackResponse: any) => {
    const konnectorJobWatcher = new KonnectorJobWatcher(this._client, job, {
      expectedSuccessDelay: 8000,
    })
    konnectorJobWatcher.watch()

    konnectorJobWatcher.on(ERROR_EVENT, () => {
      callbackResponse(JobState.Errored)
    })

    konnectorJobWatcher.on(LOGIN_SUCCESS_EVENT, () => {
      callbackResponse(JobState.Done)
    })

    konnectorJobWatcher.on(SUCCESS_EVENT, () => {
      callbackResponse(JobState.Done)
    })
  }
}