/**
 * Copyright IBM Corp. 2024, 2025
 */

import { Severity } from '../../common/enums/aplication.enum.js';
import { IRange } from '../../common/models/lint-range.model.js';
import { IlintResponse } from '../../common/models/lint-response.model.js';
import { AiErrorRemediationInfo } from './ai-error-remediations-info.model.js';

export type AiErrorRemediationOperations = 'ADD' | 'DELETE' | 'UPDATE';

// Saves the error remediations for each file under the whole file path as key
export interface AiErrorRemediationsGroup {
  [filePath: string]: AiErrorRemediations | null;
}

export interface AiErrorRemediations {
  isFileManuallyUpdated: boolean;
  updatedSpec: unknown[];
  diffs: AiErrorRemediationDiffs;
}

// Saves the individual error remediaitons with the spec file path as key
export interface AiErrorRemediationDiffs {
  [path: string]: {
    validationErrors: AiErrorRemediationInfo[];
    addedPaths: string[];
    deletedPaths: string[];
    operation: AiErrorRemediationOperations;
  };
}

export interface CommonLintResponse {
  path: string;
  severity: Severity;
  range: IRange;
  code: string | number;
  spectralMessage: string;
  spectralRuleInfo: IlintResponse;
  aiReccommendationMessage?: string;
  aiErrorRemediationInfo?: AiErrorRemediationInfo;
  triggeredBy?: 'Default linting' | 'Ruleset';
}
