'use strict'

/* global usrData, usrDataName */

import $ from 'jquery'
import _ from 'lodash'
import Vue from 'vue'

module.exports = (alerts) => {
  if ($('#page-type-admin-profile').length) {
    let vueProfile = new Vue({
      el: '#page-type-admin-profile',
      data: {
        password: '********',
        passwordVerify: '********',
        name: ''
      },
      methods: {
        saveUser: (ev) => {
          if (vueProfile.password !== vueProfile.passwordVerify) {
            alerts.pushError('Error', "Passwords don't match!")
            return
          }
          $.post(window.location.href, {
            password: vueProfile.password,
            name: vueProfile.name
          }).done((resp) => {
            alerts.pushSuccess('Saved successfully', 'Changes have been applied.')
          }).fail((jqXHR, txtStatus, resp) => {
            alerts.pushError('Error', resp)
          })
        }
      },
      created: function () {
        this.name = usrDataName
      }
    })
  } else if ($('#page-type-admin-users').length) {
    require('../modals/admin-users-create.js')(alerts)
  } else if ($('#page-type-admin-users-edit').length) {
    let vueEditUser = new Vue({
      el: '#page-type-admin-users-edit',
      data: {
        id: '',
        email: '',
        password: '********',
        name: '',
        rights: [],
        roleoverride: 'none'
      },
      methods: {
        addRightsRow: (ev) => {
          vueEditUser.rights.push({
            role: 'write',
            path: '/',
            exact: false,
            deny: false
          })
        },
        removeRightsRow: (idx) => {
          _.pullAt(vueEditUser.rights, idx)
          vueEditUser.$forceUpdate()
        },
        saveUser: (ev) => {
          let formattedRights = _.cloneDeep(vueEditUser.rights)
          switch (vueEditUser.roleoverride) {
            case 'admin':
              formattedRights.push({
                role: 'admin',
                path: '/',
                exact: false,
                deny: false
              })
              break
          }
          $.post(window.location.href, {
            password: vueEditUser.password,
            name: vueEditUser.name,
            rights: JSON.stringify(formattedRights)
          }).done((resp) => {
            alerts.pushSuccess('Saved successfully', 'Changes have been applied.')
          }).fail((jqXHR, txtStatus, resp) => {
            alerts.pushError('Error', resp)
          })
        }
      },
      created: function () {
        this.id = usrData._id
        this.email = usrData.email
        this.name = usrData.name

        if (_.find(usrData.rights, { role: 'admin' })) {
          this.rights = _.reject(usrData.rights, ['role', 'admin'])
          this.roleoverride = 'admin'
        } else {
          this.rights = usrData.rights
        }
      }
    })
    require('../modals/admin-users-delete.js')(alerts)
  } else if ($('#page-type-admin-settings').length) {
    let vueSettings = new Vue({ // eslint-disable-line no-unused-vars
      el: '#page-type-admin-settings',
      data: {
        upgradeModal: {
          state: false,
          step: 'confirm',
          mode: 'upgrade',
          error: 'Something went wrong.'
        }
      },
      methods: {
        upgrade: (ev) => {
          vueSettings.upgradeModal.mode = 'upgrade'
          vueSettings.upgradeModal.step = 'confirm'
          vueSettings.upgradeModal.state = true
        },
        reinstall: (ev) => {
          vueSettings.upgradeModal.mode = 're-install'
          vueSettings.upgradeModal.step = 'confirm'
          vueSettings.upgradeModal.state = true
        },
        upgradeCancel: (ev) => {
          vueSettings.upgradeModal.state = false
        },
        upgradeStart: (ev) => {
          vueSettings.upgradeModal.step = 'running'
          $.post('/admin/settings/install', {
            mode: vueSettings.upgradeModal.mode
          }).done((resp) => {
            // todo
          }).fail((jqXHR, txtStatus, resp) => {
            vueSettings.upgradeModal.step = 'error'
            vueSettings.upgradeModal.error = jqXHR.responseText
          })
        },
        flushcache: (ev) => {
          window.alert('Coming soon!')
        },
        resetaccounts: (ev) => {
          window.alert('Coming soon!')
        },
        flushsessions: (ev) => {
          window.alert('Coming soon!')
        }
      }
    })
  }
}