import type { Meta, StoryObj } from '@storybook/angular';
import { moduleMetadata } from '@storybook/angular';
import { FormBuilder } from '@angular/forms';
import { DatapageService } from '@pega/angular-sdk-components';
import { children } from './mock';

import { PegaDxilMyTwoColumnFormComponent } from './pega-dxil-my-two-column-form.component';

class MockingDatapageService {
  getDataPageData = () => Promise.resolve({});
}

window.PCore.getContextTreeManager = (): any => {
  return {
    removeContextTreeNode: () => {
      /* nothing */
    }
  };
};

const meta: Meta<PegaDxilMyTwoColumnFormComponent> = {
  title: 'PegaDxilMyTwoColumnForm',
  decorators: [
    moduleMetadata({
      providers: [{ provide: DatapageService, useClass: MockingDatapageService }]
    })
  ],
  component: PegaDxilMyTwoColumnFormComponent,
  excludeStories: /.*Data$/,
  render: (args) => ({
    props: {
      ...args,
      pConn$: {
        getChildren: () => {
          return children;
        },
        resolveConfigProps: () => {},
        getValue: () => {
          /* nothing */
        },
        getCurrentView: () => {
          /* nothing */
        },
        getCurrentClassID: () => {
          /* nothing */
        },
        isEditable: () => true,
        setAction: () => {},
        getActions: () => {
          return {
            onChange: () => {},
            onBlur: () => {}
          };
        },
        populateAdditionalProps: () => {},
        getConfigProps: () => {
          return {
            NumCols: '1'
          };
        },
        getInheritedProps: () => {
          /* nothing */
        },
        getContextName: () => ''
      } as any,
      formGroup$: new FormBuilder().group({})
    }
  })
};

export default meta;
type Story = StoryObj<PegaDxilMyTwoColumnFormComponent>;

export const PegaDxilMyTwoColumnForm: Story = {
  args: {}
};
