import { BaseModel } from './base'
import { Dataset } from './dataset'
import { Record } from 'immutable'
import axios from 'axios'

const ProjectRecord = Record({
  id: 0,
  datasetId: 0,
  name: '',
  algorithm: '',
  dataset: null,
  createdAt: '',
  updatedAt: ''
})

const urlBase = '/api/projects'

export class Project extends BaseModel(ProjectRecord, urlBase, 'project') {
  static create (datasetId, name, algorithm, progressCallback = () => {}) {
    const config = { onUploadProgress: progressCallback }
    const data = { dataset_id: datasetId, name: name, algorithm: algorithm }
    return new Promise((resolve, reject) => {
      axios.post('/api/projects', data, config)
        .then((res) => {
          const project = Project.fromResponse(res.data)
          resolve(project)
          return project
        })
        .catch((err) => reject(err))
    })
  }

  static fromResponse (data) {
    let dataset = null
    if (data.dataset !== undefined && data.dataset !== null) {
      dataset = Dataset.fromResponse(data.dataset)
    }
    const project = new Project({
      id: data.id,
      datasetId: data.dataset_id,
      name: data.name,
      algorithm: data.algorithm,
      dataset: dataset,
      createdAt: data.created_at,
      updatedAt: data.updated_at
    })
    return project
  }

  toRequest () {
    return {
      id: this.id,
      dataset_id: this.datasetId,
      name: this.name
    }
  }
}