import type { EntityRelationType } from '../types/catalog';

export const CATALOG_TAG_MAX_LENGTH = 15;

export const PREDEFINED_ENTITY_TYPES = [
  'service',
  'domain',
  'team',
  'user',
  'api-description',
  'data-schema',
  'api-operation',
];

export const reverseRelationMap: Record<EntityRelationType, EntityRelationType> = {
  partOf: 'hasParts',
  hasParts: 'partOf',
  creates: 'createdBy',
  createdBy: 'creates',
  owns: 'ownedBy',
  ownedBy: 'owns',
  implements: 'implementedBy',
  implementedBy: 'implements',
  dependsOn: 'dependencyOf',
  dependencyOf: 'dependsOn',
  uses: 'usedBy',
  usedBy: 'uses',
  produces: 'consumes',
  consumes: 'produces',
  linksTo: 'linksTo',
  supersedes: 'supersededBy',
  supersededBy: 'supersedes',
  compatibleWith: 'compatibleWith',
  extends: 'extendedBy',
  extendedBy: 'extends',
  relatesTo: 'relatesTo',
  hasMember: 'memberOf',
  memberOf: 'hasMember',
  triggers: 'triggeredBy',
  triggeredBy: 'triggers',
  returns: 'returnedBy',
  returnedBy: 'returns',
} as const;

export const relationTypeMap: Record<EntityRelationType, string> = {
  partOf: 'Part of',
  hasParts: 'Has parts',
  creates: 'Creates',
  createdBy: 'Created by',
  owns: 'Owns',
  ownedBy: 'Owned by',
  implements: 'Implements',
  implementedBy: 'Implemented by',
  dependsOn: 'Depends on',
  dependencyOf: 'Dependency of',
  uses: 'Uses',
  usedBy: 'Used by',
  produces: 'Produces',
  consumes: 'Consumes',
  linksTo: 'Links to',
  supersedes: 'Supersedes',
  supersededBy: 'Superseded by',
  compatibleWith: 'Compatible with',
  extends: 'Extends',
  extendedBy: 'Extended by',
  relatesTo: 'Relates to',
  hasMember: 'Has member',
  memberOf: 'Member of',
  triggers: 'Triggers',
  triggeredBy: 'Triggered by',
  returns: 'Returns',
  returnedBy: 'Returned by',
};

export enum GraphHandleType {
  Target = 'target',
  Source = 'source',
}

export enum GraphCustomNodeType {
  CatalogEntity = 'catalogEntity',
}

export enum GraphCustomEdgeType {
  CatalogEdge = 'catalogEdge',
}

export const VERSION_NOT_SPECIFIED = 'not_specified_version';
