import { SyncOpStatus } from '@standardnotes/snjs'
import { action, makeObservable, observable } from 'mobx'

export class SyncStatusController {
  inProgress = false
  errorMessage?: string = undefined
  humanReadablePercentage?: string = undefined

  constructor() {
    makeObservable(this, {
      inProgress: observable,
      errorMessage: observable,
      humanReadablePercentage: observable,
      update: action,
    })
  }

  update = (status: SyncOpStatus): void => {
    this.errorMessage = status.error?.message
    this.inProgress = status.syncInProgress
    const stats = status.getStats()
    const completionPercentage =
      stats.uploadCompletionCount === 0 ? 0 : stats.uploadCompletionCount / stats.uploadTotalCount

    if (completionPercentage === 0) {
      this.humanReadablePercentage = undefined
    } else {
      this.humanReadablePercentage = completionPercentage.toLocaleString(undefined, {
        style: 'percent',
      })
    }
  }
}
