/**
 * <%= titleCase(pluralDomainName) %> Actions
 * v<%= zionAppsGeneratorVersion %> | Generated on <%= zionAppsGeneratorBuildDate %>
 */
import {
  generateNgRxCoreActionName,
  generateNgRxCoreActions,
  generateNgRxCoreEmptyPayloadAction,
  generateNgRxCoreErrorPayloadAction,
  generateNgRxCoreItemPayloadAction,
  generateNgRxCoreListPayloadAction,
} from '@zionusa-nx-workspace/shared/ngrx-core';
import { <%= pascalCase(singularDomainName) %> } from '@zionusa-nx-workspace/shared/domain';
import {
  I<%= pascalCase(pluralDomainName) %>Actions,
  I<%= pascalCase(pluralDomainName) %>ActionType,
  <%= pascalCase(pluralDomainName) %>Config,
} from './<%= paramCase(pluralDomainName) %>.domain';

const { Type, ...ActionGenerators } = generateNgRxCoreActions<<%= pascalCase(singularDomainName) %>, <%= idPropertyDataType %>>(<%= pascalCase(pluralDomainName) %>Config.pluralName);

const <%= pascalCase(singularDomainName) %>Type: I<%= pascalCase(pluralDomainName) %>ActionType = {
  // Spread the original types
  ...Type,

  // Add additional action types
  EmptyExample: generateNgRxCoreActionName(<%= pascalCase(pluralDomainName) %>Config.pluralName, 'EmptyExample'),
  ErrorExample: generateNgRxCoreActionName(<%= pascalCase(pluralDomainName) %>Config.pluralName, 'ErrorExample'),
  ItemExample: generateNgRxCoreActionName(<%= pascalCase(pluralDomainName) %>Config.pluralName, 'ItemExample'),
  ListExample: generateNgRxCoreActionName(<%= pascalCase(pluralDomainName) %>Config.pluralName, 'ListExample'),
};

export const <%= pascalCase(pluralDomainName) %>Actions: I<%= pascalCase(pluralDomainName) %>Actions = {
  Type: <%= pascalCase(singularDomainName) %>Type,

  // Spread the original actions
  ...ActionGenerators,

  // Add additional action generators
  EmptyExample: generateNgRxCoreEmptyPayloadAction(<%= pascalCase(singularDomainName) %>Type.EmptyExample),
  ErrorExample: generateNgRxCoreErrorPayloadAction(<%= pascalCase(singularDomainName) %>Type.ErrorExample),
  ItemExample: generateNgRxCoreItemPayloadAction<<%= pascalCase(singularDomainName) %>>(<%= pascalCase(singularDomainName) %>Type.ItemExample),
  ListExample: generateNgRxCoreListPayloadAction<<%= pascalCase(singularDomainName) %>>(<%= pascalCase(singularDomainName) %>Type.ListExample),
};
