/**
 * @fileoverview Vulnerability-related models for DeepSource integration.
 * @packageDocumentation
 */

import {
  VulnerabilitySeverity,
  PackageVersionType,
  VulnerabilityReachability,
  VulnerabilityFixability,
} from '../types/vulnerability.js';

/**
 * Package information
 * @public
 */
export interface Package {
  id: string;
  name: string;
  ecosystem: string;
  description?: string;
  license?: string;
  repository?: string;
  homepage?: string;
}

/**
 * Package version information
 * @public
 */
export interface PackageVersion {
  id: string;
  package: Package;
  version: string;
  type: PackageVersionType;
  publishedAt?: string;
  directDependencies?: PackageVersion[];
}

/**
 * Vulnerability information
 * @public
 */
export interface Vulnerability {
  id: string;
  cveId: string;
  title: string;
  description: string;
  severity: VulnerabilitySeverity;
  fixable: boolean;
  fixVersion?: string;
  publishedAt: string;
  updatedAt: string;
  references: string[];
  exploitMaturity?: string;
  cvssScore?: number;
  cvssVector?: string;
  cwes?: Array<{
    id: string;
    name: string;
  }>;
  affectedVersionRange?: string;
  patchedVersions?: string[];
  vulnerableVersions?: string[];
  vulnerableFunctions?: string[];
  reachability?: VulnerabilityReachability;
  fixability?: VulnerabilityFixability;
  exploitPredictions?: {
    probability?: number;
    severity?: string;
  };
  advisories?: Array<{
    id: string;
    source: string;
    url: string;
  }>;
  occurrences?: VulnerabilityOccurrence[];
}

/**
 * Vulnerability occurrence information
 * @public
 */
export interface VulnerabilityOccurrence {
  dependency: {
    name: string;
    version: string;
    packageManager: string;
  };
  filePath: string;
  affectedVersionRange: string;
  introducedThrough?: string[];
  fixAvailable?: boolean;
  fixVersion?: string;
  vulnerabilityId?: string;
}
