import { AggregationMappingListLinkRel } from '@admin-client/reporting-shared';
import { faker } from '@faker-js/faker';
import { times } from 'lodash-es';
import { LinkRelationName } from '../../../tech-shared/src';
import { toResource } from '../../../tech-shared/test/resource';
import { AggregationMapping, AggregationMappingListResource, AggregationMappingResource } from '../src';

export function createAggregationMapping(): AggregationMapping {
  return {
    name: faker.word.noun(),
    formIdentifier: {
      formEngineName: faker.lorem.word(),
      formId: faker.string.uuid(),
    },
    mappings: [
      {
        sourcePath: faker.lorem.word(),
        targetPath: faker.lorem.word(),
      },
    ],
  };
}

export function createAggregationMappingResource(linkRelations: LinkRelationName[] = []): AggregationMappingResource {
  return toResource(createAggregationMapping(), linkRelations);
}

export function createAggregationMappingResources(linkRelations: LinkRelationName[] = []): AggregationMappingResource[] {
  return times(10, () => createAggregationMappingResource(linkRelations));
}

export function createAggregationMappingListResource(linkRelations: LinkRelationName[] = []): AggregationMappingListResource {
  return toResource({}, linkRelations, {
    [AggregationMappingListLinkRel.LIST]: createAggregationMappingResources(),
  });
}