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 { PegaDxilMyFormComponent } from './pega-dxil-my-form.component';

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

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

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

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

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