import { createUnionType } from '@nestjs/graphql';
import { GroupsResult } from '../groups-result.model';
import { HeatMapResult } from '../heat-map-result.model';
import { LineChartResult } from '../line-chart-result.model';
import { RawResult } from '../raw-result.model';
import { TableResult } from '../table-result.model';

export const ResultUnion = createUnionType({
  name: 'ResultUnion',
  types: () => [
    TableResult,
    RawResult,
    GroupsResult,
    HeatMapResult,
    LineChartResult,
  ],
  resolveType(value) {
    if (value.headers) {
      return TableResult;
    }

    if (value.groups) {
      return GroupsResult;
    }

    if (value.matrix) {
      return HeatMapResult;
    }

    if (value.lines) {
      return LineChartResult;
    }

    return RawResult;
  },
});