//
// Copyright © 2020 Anticrm Platform Contributors.
// 
// Licensed under the Eclipse Public License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License. You may
// obtain a copy of the License at https://www.eclipse.org/legal/epl-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// 
// See the License for the specific language governing permissions and
// limitations under the License.
//

import type { AttachedDoc, Doc } from '@anticrm/core'
import core from '@anticrm/core'

import StringEditor from './components/StringEditor.svelte'
import StringPresenter from './components/StringPresenter.svelte'
import BooleanEditor from './components/BooleanEditor.svelte'
import BooleanPresenter from './components/BooleanPresenter.svelte'
import StatePresenter from './components/StatePresenter.svelte'
import StateEditor from './components/StateEditor.svelte'
import TimestampPresenter from './components/TimestampPresenter.svelte'
import TableView from './components/TableView.svelte'
import Table from './components/Table.svelte'
import KanbanView from './components/KanbanView.svelte'

import { getClient, MessageBox } from '@anticrm/presentation'
import { showPopup } from '@anticrm/ui'
import {buildModel} from './utils'

export { Table }
export { buildModel, getObjectPresenter, getActions } from './utils'

function Delete(object: Doc): void {
  showPopup(MessageBox, {
    label: 'Delete object',
    message: 'Do you want to delete this object?'
  }, undefined, (result) => {
    if (result) {
      const client = getClient()
      if(client.getHierarchy().isDerived(object._class, core.class.AttachedDoc)) {
        const adoc = object as AttachedDoc
        client.removeCollection(object._class, object.space, adoc._id, adoc.attachedTo, adoc.attachedToClass, adoc.collection)    
      } else {
        client.removeDoc(object._class, object.space, object._id)    
      }
    }
  })
}

export default async () => ({
  actionImpl: {
    Delete
  },
  component: {
    StringEditor,
    StringPresenter,
    BooleanPresenter,
    BooleanEditor,
    StatePresenter,
    StateEditor,
    TableView,
    KanbanView,
    TimestampPresenter
  }
})
