import { ServiceApi } from '@openapi/registry-service';
import { baseServiceId } from '@/constants/entities/Service';
import XmlParser from '@utils/parsers/XmlParser';
import { isServiceBase } from '@utils/entities/Service';
import { ValidatorResponse } from '@interfaces/base/ValidatorRespose';

/*
  В базовой услуге не должно быть поцесса с таким id

  Этот валидатор нужен для всех услуг, кроме базовой
*/
export const multipleUseValidator = async (
  file: File,
  serviceId: string
): Promise<ValidatorResponse> => {
  if (isServiceBase(serviceId)) return { isValid: true };

  const { data: baseService } = await new ServiceApi().getService(
    baseServiceId,
    'processes'
  );
  const json = await XmlParser.parse(file);
  const name = json.elements?.[0].elements?.[0]?.attributes?.id ?? '';
  const processes = ((baseService as unknown) as {
    processes: { name: string }[];
  }).processes; // TODO: В сгенереном сервисе должна быть типизация для процессов
  return {
    isValid: !processes?.map((el) => el.name).includes(name),
  };
};
