import { PortletPartController } from '@ibiz-template/controller';
import { useNamespace } from '@ibiz-template/vue-util';
import { computed, defineComponent } from 'vue';
import { IPSUIActionGroupDetail } from '@ibiz-template/model';
import './portlet-layout.scss';

/**
 * 门户控件布局
 */
export const PortletLayout = defineComponent({
  props: {
    controller: {
      type: PortletPartController,
      required: true,
    },
  },
  setup(props) {
    const ns = useNamespace('portlet-layout');
    const c = props.controller;
    // 处理标题
    const isShowHeader = computed(() => {
      // return c.model.showTitleBar || c.model.actionGroup;
      return c.model.showTitleBar;
    });

    // 点击工具栏处理
    const onActionClick = async (
      detail: IPSUIActionGroupDetail,
      event: MouseEvent,
    ) => {
      await props.controller.onActionClick(detail, event);
    };

    return { ns, isShowHeader, onActionClick };
  },
  render() {
    const { model, state } = this.controller;
    return (
      <div class={[this.ns.b(), this.ns.is('no-header', !this.isShowHeader)]}>
        {this.isShowHeader && (
          <div key='header' class={this.ns.b('header')}>
            <div class={this.ns.be('header', 'left')}>
              {model.showTitleBar && (
                <div class={this.ns.e('caption')}>
                  <app-icon
                    class={this.ns.e('caption-icon')}
                    icon={model.source.getPSSysImage()}
                  ></app-icon>
                  <span class={this.ns.e('caption-text')} title={model.title}>
                    {model.title}
                  </span>
                </div>
              )}
            </div>
            <div class={this.ns.be('header', 'right')}>
              {model.actionGroup && state.actionGroupState && (
                <action-toolbar
                  class={this.ns.e('toolbar')}
                  actionGroup={model.actionGroup}
                  actionsState={state.actionGroupState}
                  on-action-click={this.onActionClick}
                ></action-toolbar>
              )}
            </div>
          </div>
        )}
        <div key='content' class={this.ns.b('content')}>
          {this.$slots.default}
        </div>
      </div>
    );
  },
});