import ServiceDlg from 'Dialogs/ServiceDlg'
import BaseSvc from './BaseSvc'
import React from 'react'

export default class DialogSvc extends BaseSvc {
  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  constructor (opts) {
    super(opts)

    this.disableOK = this.disableOK.bind(this)
    this.close = this.close.bind(this)
  }

  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  setComponent (component) {
    this.component = component

    this.setState({
      close: this.close,
      open: false
    })
  }

  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  setState (state, assign = false) {
    return new Promise((resolve) => {
      const dialogSvcState = assign
        ? Object.assign({}, this.getState(), state)
        : Object.assign({}, state, {
          close: this.close
        })

      const componentState = Object.assign({},
        this.component.state, {
          dialogSvc: dialogSvcState
        })

      this.component.setState(componentState, () => {
        resolve()
      })
    })
  }

  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  disableOK (disable) {
    this.setState({
      disableOK: disable
    }, true)
  }

  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  getState () {
    return this.component.state.dialogSvc
  }

  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  name () {
    return 'DialogSvc'
  }

  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  close (result) {
    this.setState({

      open: false

    }, false).then(() => {
      this.emit('dialog.close', result)
    })
  }

  /// //////////////////////////////////////////////////////////////
  //
  //
  /// //////////////////////////////////////////////////////////////
  render () {
    const state = this.getState()

    return <ServiceDlg {...state} />
  }
}
