import * as plugins from '../plugins.js';
import * as shared from '../elements/shared/index.js';

import {
  DeesElement,
  customElement,
  html,
  state,
  css,
  cssManager,
} from '@design.estate/dees-element';

import * as appstate from '../appstate.js';

@customElement('cloudly-view-dbs')
export class CloudlyViewDbs extends DeesElement {
  @state()
  private data: appstate.IDataState = {
    secretGroups: [],
    secretBundles: [],
  };

  constructor() {
    super();
    const subecription = appstate.dataState
      .select((stateArg) => stateArg)
      .subscribe((dataArg) => {
        this.data = dataArg;
      });
    this.rxSubscriptions.push(subecription);
  }

  public static styles = [
    cssManager.defaultStyles,
    shared.viewHostCss,
    css`
      
    `,
  ];

  public render() {
    return html`
      <cloudly-sectionheading>DBs</cloudly-sectionheading>
      <dees-table
        .heading1=${'DBs'}
        .heading2=${'decoded in client'}
        .data=${this.data.dbs}
        .displayFunction=${(itemArg: plugins.interfaces.data.ICluster) => {
          return {
            id: itemArg.id,
            serverAmount: itemArg.data.servers.length,
          };
        }}
        .dataActions=${[
          {
            name: 'add configBundle',
            iconName: 'plus',
            type: ['header', 'footer'],
            actionFunc: async (dataActionArg) => {
              const modal = await plugins.deesCatalog.DeesModal.createAndShow({
                heading: 'Add ConfigBundle',
                content: html`
                  <dees-form>
                    <dees-input-text .key=${'id'} .label=${'ID'} .value=${''}></dees-input-text>
                    <dees-input-text
                      .key=${'data.secretGroupIds'}
                      .label=${'secretGroupIds'}
                      .value=${''}
                    ></dees-input-text>
                    <dees-input-text
                      .key=${'data.includedTags'}
                      .label=${'includedTags'}
                      .value=${''}
                    ></dees-input-text>
                  </dees-form>
                `,
                menuOptions: [
                  { name: 'create', action: async (modalArg) => {} },
                  {
                    name: 'cancel',
                    action: async (modalArg) => {
                      modalArg.destroy();
                    },
                  },
                ],
              });
            },
          },
          {
            name: 'delete',
            iconName: 'trash',
            type: ['contextmenu', 'inRow'],
            actionFunc: async (actionDataArg) => {
              plugins.deesCatalog.DeesModal.createAndShow({
                heading: `Delete ConfigBundle ${actionDataArg.item.id}`,
                content: html`
                  <div style="text-align:center">
                    Do you really want to delete the ConfigBundle?
                  </div>
                  <div
                    style="font-size: 0.8em; color: red; text-align:center; padding: 16px; margin-top: 24px; border: 1px solid #444; font-family: Intel One Mono; font-size: 16px;"
                  >
                    ${actionDataArg.item.id}
                  </div>
                `,
                menuOptions: [
                  {
                    name: 'cancel',
                    action: async (modalArg) => {
                      await modalArg.destroy();
                    },
                  },
                  {
                    name: 'delete',
                    action: async (modalArg) => {
                      appstate.dataState.dispatchAction(appstate.deleteSecretBundleAction, {
                        configBundleId: actionDataArg.item.id,
                      });
                      await modalArg.destroy();
                    },
                  },
                ],
              });
            },
          },
        ] as plugins.deesCatalog.ITableAction[]}
      ></dees-table>
    `;
  }
}