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

import {{! pick new delimiters for mustache }}{{=<% %>=}}{<%={{ }}=%> {{COMPONENT_CLASS_NAME}}Component {{=<% %>=}}}<%={{ }}=%>{{! revert delimiters for mustache }} from './{{COMPONENT_CLASS_NAME_KEBAB}}.component';

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

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

const meta: Meta<{{COMPONENT_CLASS_NAME}}Component> = {
  title: '{{COMPONENT_CLASS_NAME}}',
  decorators: [
    moduleMetadata({
      providers: [{ provide: DatapageService, useClass: MockingDatapageService }]
    }),
    applicationConfig({
      providers: [provideHttpClient()]
    })
  ],
  component: {{COMPONENT_CLASS_NAME}}Component,
  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<{{COMPONENT_CLASS_NAME}}Component>;

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